我对 SQL 查询还很陌生,不太明白这个问题。
我有两个表,其中一个表正在运行一个通用的SELECT ... WHERE
, super 简单的 SQL 语句。
例如:
SELECT * from maindata where somedata4 LIKE "%data4.%"
这会返回下面所有 6 个条目的列表,但是我想要一个附加列来显示当前 userdata.userId
是否有匹配的行,并包含该行的金额列。如果没有该行,则默认值为 0。
表:主数据
id | somedata | somedata2 | somedata3 | somedata4
_________________________________________________
1 | data1.1 | data2.1 | data3.1 | data4.1
2 | data1.2 | data2.2 | data3.2 | data4.2
3 | data1.3 | data2.3 | data3.3 | data4.3
4 | data1.4 | data2.4 | data3.4 | data4.4
5 | data1.5 | data2.5 | data3.5 | data4.5
6 | data1.6 | data2.6 | data3.6 | data4.6
表:用户数据
id | itemId | amount | userId
_____________________________
1 | 6 | 4 | 1
2 | 4 | 4 | 26
3 | 4 | 2 | 1
它应该在表maindata中搜索WHERE somedata4 LIKE "%data4.%"
,并在每个条目上在表userdata中查找userdata.amount
与 maindata.id = userdata.itemId WHERE maindata.userId = 1
这是我目前拥有的 SQL
SELECT m.*, IFNULL(u.amount,0)
from maindata m
LEFT OUTER JOIN userdata u ON m.id = u.itemId
WHERE m.somedata4 LIKE "%data4.%"
我缺少的是仅过滤 userdata.userId = 1
中的金额,我希望整个列表按该查询中的原样显示。
预期结果:
id | somedata | somedata2 | somedata3 | somedata4 | amount
__________________________________________________________
1 | data1.1 | data2.1 | data3.1 | data4.1 | 0
2 | data1.2 | data2.2 | data3.2 | data4.2 | 0
3 | data1.3 | data2.3 | data3.3 | data4.3 | 0
4 | data1.4 | data2.4 | data3.4 | data4.4 | 4
5 | data1.5 | data2.5 | data3.5 | data4.5 | 0
6 | data1.6 | data2.6 | data3.6 | data4.6 | 2
最佳答案
SELECT m.*, IFNULL(u.amount,0) from maindata m LEFT OUTER JOIN
userdata u ON m.id = u.itemId WHERE m.userId = 1
关于MySQL 连接和默认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447693/