php - MySQL连接2个具有重复行的表,但优先考虑左表中的行

标签 php mysql

我有两张 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 12341235 ,但不是12411249我也想包括在内。然而,价格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/

相关文章:

php - 使用 union 将 sql 转换为 Doctrine 查询

java - 用java搞乱了我的日期格式

php - 在类中调用函数时触发事件

php - 如果图像字段为空,如何使用php插入数据

php - 无法在 CentOS 7 上安装 Laravel 5

php - 从 Gmaps 中获取草地、街道、水等信息

php - 使用 PHP 和 MySQL 存储和显示 unicode 字符串 (हिन्दी)

php - 别人有错误,修复不起作用

javascript - 为什么我的 JQuery ReplaceWith() 不工作?

mysql Column Name AS 1,Column Name AS 2,with WHERE,对所有列使用UNION得到AS 1