CREATE TABLE orders
(
product CHAR(3),
yr CHAR(4)
);
INSERT INTO orders
VALUES ('a', '2019');
CREATE TABLE customers
(
cus_name CHAR(20),
columnX CHAR(3),
columnY CHAR(3),
price INT
);
INSERT INTO customers VALUES ('john', 'b', 'a', 100);
INSERT INTO customers VALUES ('brad', 'a', 'd', 200);
我想基于列連接順序表與客戶表product的orders表。
我想price根據列columnY或columnX每個產品獲取一個。
columnY應該優先考慮。如果產品存在,columnY則從該行獲取價格。
如果它不存在,則檢查columnX并獲取該價格。
帶有 OR 操作的以下查詢為我提供了兩行,但我只想要第一行cus_nameas John
select *
from orders a
left join customers c on a.product = c.columnY
or a.product = c.columnX
| 產品 | 年 | 客戶名稱 | 列X | 列Y | 價錢 |
|---|---|---|---|---|---|
| 一種 | 2019年 | 約翰 | 乙 | 一種 | 100 |
| 一種 | 2019年 | 布拉德 | 一種 | d | 200 |
預期輸出將是:
| 產品 | 年 | 客戶名稱 | 列X | 列Y | 價錢 |
|---|---|---|---|---|---|
| 一種 | 2019年 | 約翰 | 乙 | 一種 | 100 |
提前致謝
編輯為清楚:每一個產品將只出現一次columnX和columnY,即ColumnY并ColumnX不能有一個以上的產品“A”
uj5u.com熱心網友回復:
使用
如果我們洗掉 2020 條目(與當前情況相同,則結果將是)

uj5u.com熱心網友回復:
我會通過“Intersect”找到“ColumnY”列的所有目標值,然后將它們用作過濾器。
Select orders.product, orders.yr, customers.cus_name, customers.columnX, customers.columnY, customers.price
From customers Inner Join orders On (customers.columnY=orders.product)
Where columnY In (Select columnY From customers
Intersect
Select columnX From customers)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/343699.html
標籤:sql sql-server 查询语句 加入
上一篇:如何使用多個引數成功進行子查詢
