我有两张 table 。一种是针对所有客户的通用价目表,另一种是针对特定客户的特殊价目表。
其中一个例子:
特别列表
ID | STOCK_CODE | PRICING_REF | PRICE
1 | 1234 | CUST001 | 1.00
2 | 1235 | CUST001 | 2.00
通用列表
ID | STOCK_CODE | PRICE
1 | 1234 | 4.99
2 | 1241 | 4.99
3 | 1249 | 5.99
我想加入 2,我目前正在这样做。但是,如果股票代码匹配并且该行中有可用价格,我不想只显示一个列表,而是合并 2 个列表,但仅显示特殊列表中的价格。
到目前为止我的声明是:
SELECT * FROM stock s LEFT JOIN price p ON p.stock_code = s.stock_code WHERE PRICING_REF = '$pricing_ref' AND s.stock_code = '$ref'
这仅返回特殊列表中商品的价格,缺少通用列表中的其余商品。
目前,如果我搜索项目:'%1%'
它将返回stock_code 1234
和1235
,但不是1241
和1249
我也想包括在内。然而,价格1234
必须来自Special List
,而不是 Generic List
.
最佳答案
我认为您需要来自special
的所有行,然后是来自generic
的不匹配行。如果是这样:
select ID, STOCK_CODE, PRICE
from special
union all
select ID, STOCK_CODE, PRICE
from generic g
where not exists (select 1 from special s where g.stock_code = s.stock_code)
关于php - MySQL连接2个具有重复行的表,但优先考虑左表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32001124/