我对SQL查询仍然很陌生,并且不能很好地解决这个问题。
我有两个表,一个表我正在运行一般SELECT ... WHERE
,超级简单的SQL语句。
例如:
SELECT * from maindata where somedata4 LIKE "%data4.%"
这给了我一个下面所有6个条目的列表,但是我想要一个额外的列来显示当前userdata.userId
是否有匹配的行并包含其中的amount列。如果它没有将该行默认为值0。
表:maindata
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
表:userdata
id | itemId | amount | userId
_____________________________
1 | 6 | 4 | 1
2 | 4 | 4 | 26
3 | 4 | 2 | 1
它应该搜索WHERE somedata4 LIKE "%data4.%"
的表 maindata ,并且每个条目都会在表{strong> 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
答案 0 :(得分:1)
SELECT m.*, IFNULL(u.amount,0) from maindata m LEFT OUTER JOIN
userdata u ON m.id = u.itemId WHERE m.userId = 1
答案 1 :(得分:0)
我试过这个解决方案,但我不确定这是不是你要找的。让我知道。
-------编辑--------
现在我确定你在寻找什么。我只有几分钟,所以我没有真正优化代码,但这似乎工作除了字段的顺序,由于我们在两组不同的结果中运行,因此无法真正修改。
顺便说一下,这是查询
SELECT m.*, '0' as amount
from maindata m
left outer JOIN userdata u ON m.id = u.itemId
where (u.userid is null) and m.somedata4 LIKE '%data4.%'
UNION
SELECT m.*, u.amount
from maindata m
inner JOIN userdata u ON m.id = u.itemId
where u.userid = 1 and m.somedata4 LIKE '%data4.%'
希望这有帮助。
答案 2 :(得分:0)
这是我正在寻找的SQL查询(我认为):
SELECT m.*, IFNULL(u.amount,0) AS "Amount"
FROM maindata m
LEFT OUTER JOIN userdata u ON m.id = u.itemId AND userid = 1
WHERE m.somedata4 LIKE "%data4.%"
它给了我上面列出的预期结果,我只是不知道它是否是处理此请求的最有效方式。