我不是查询大师,所以我需要一些帮助...... 我得到以下查询:
SELECT u.id, device_id, profit
FROM device d
JOIN user u ON d.user_id = u.id
WHERE day = '2017-12-20' and u.id= '22'
现在返回
--------------------------------------------------
| u.id| device_id |profit |
--------------------------------------------------
| 22 |1 |200 |
--------------------------------------------------
| 22 |2 |600 |
-------------------------------------------------
| 22 |4 |400 |
--------------------------------------------------
| 22 |5 |650 |
--------------------------------------------------
如您所见,缺少device_id(3),我希望结果如下:
--------------------------------------------------
| u.id| device_id |profit |
--------------------------------------------------
| 22 |1 |200 |
--------------------------------------------------
| 22 |2 |600 |
-------------------------------------------------
| 22 |3 |0 (or null) |
-------------------------------------------------
| 22 |4 |400 |
--------------------------------------------------
| 22 |5 |650 |
--------------------------------------------------
我跑的原因
SELECT DISTINCT device_id
FROM device
我得到了
---------------
|device_id |
---------------
|1 |
---------------
|2 |
---------------
|3 |
---------------
|4 |
---------------
|5 |
---------------
基本上我想要的是显示用户的每个设备,无论该用户是否在该设备上有利润,我在考虑在同一个桌面上加入,这是否可能以某种方式?< / p>
修改
'user'表如下所示:
------------
|id | name |
------------
'device'表格如下:
-------------------------------
|user_id | device_id | profit |
-------------------------------
答案 0 :(得分:1)
这应该有效:
SELECT u.id, device_id, profit
FROM device d
LEFT JOIN user u ON d.user_id = u.id
WHERE d.day = '2017-12-20' and d.user_id = '22'
如果这不返回3
,则必须是设备表中2个过滤器中的1个将其排除。
答案 1 :(得分:0)
这是LEFT JOIN
代替JOIN
的工作。你可能想要......
SELECT u.id, device_id, profit
FROM user u
LEFT JOIN device d ON d.user_id = u.id
WHERE day = '2017-12-20' and u.id= '22'
或者
SELECT u.id, device_id, profit
FROM device d
RIGHT JOIN user u ON d.user_id = u.id
WHERE day = '2017-12-20' and u.id= '22'
答案 2 :(得分:0)
嗯。我想你想要:
SELECT u.id, d.device_id, d.profit
FROM user u LEFT JOIN
device d
ON d.user_id = u.id AND d.day = '2017-12-20'
WHERE u.id = 22;
确切地说有点难,因为你没有指定表格的样子。
编辑:
以上内容将返回NULL
设备ID。因此,如果列分配正确,那么这个更简单的查询将起作用:
SELECT 22 as id, d.device_id,
(CASE WHEN d.user_id = 22 AND d.day = '2017-12-20' THEN d.profit END) as profit
FROM device d;