【发布时间】:2021-12-15 21:47:42
【问题描述】:
CREATE TABLE orders
(
product CHAR(3),
yr CHAR(4)
);
INSERT INTO orders VALUES ('a', '2019');
INSERT INTO orders VALUES ('m', '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);
INSERT INTO customers VALUES ('chris', 'm', 'y', 200);
INSERT INTO customers VALUES ('Luis', 'r', 'm', 200);
我想根据orders 表中的product 列将订单表与客户表连接起来。
我想根据每个产品的 columnY 或 columnX 列获取一个 price。
columnY 应优先考虑。如果产品存在于columnY 中,则从该行获取价格。
如果不存在,则检查columnX 并获取该价格。
下面带有 OR 操作的查询给了我两行,但我只想要第一行 cus_name 作为 John
select *
from orders a
left join customers c on a.product = c.columnY
or a.product = c.columnX
| product | yr | cus_name | columnX | columnY | price |
|---|---|---|---|---|---|
| a | 2019 | john | b | a | 100 |
| a | 2019 | brad | a | d | 200 |
| m | 2019 | chris | m | y | 200 |
| m | 2019 | Luis | r | m | 200 |
预期的输出是:
| product | yr | cus_name | columnX | columnY | price |
|---|---|---|---|---|---|
| a | 2019 | john | b | a | 100 |
| m | 2019 | luis | r | m | 200 |
提前致谢
为清楚起见进行编辑:每个产品在 columnX 和 columnY 中只会出现一次,即 ColumnY 和 ColumnX 不能有多个产品“a”
编辑 2 - 在订单表中包含多个产品。
【问题讨论】:
-
选择约翰而不是布拉德的标准是什么?也许是一个简单的
TOP 1? -
是的,在上面的示例中,条件是每当产品“a”首先出现在客户表的 Y 列中时
-
如果 Y 中的产品存在 2 行怎么办?
标签: sql sql-server tsql join