sql查询必须返回所有数据,而不仅仅是现有数据

5fjcxozz  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(315)

我不是一个查询高手,所以我需要一些帮助。。。我得到以下查询:

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                         |
--------------------------------------------------

如您所见,设备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            |
---------------

基本上我想要的是显示用户的每一个设备,不管这个用户在这个设备上有没有利润,我在考虑在同一个表上加入一个连接,这在某种程度上是可能的吗?
编辑
“user”表如下所示:

------------
|id | name |
------------

“设备”表如下所示:

-------------------------------
|user_id | device_id | profit |
-------------------------------
pvabu6sv

pvabu6sv1#

这是我的工作 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'
6tqwzwtp

6tqwzwtp2#

这应该起作用:

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个排除了它。

ruyhziif

ruyhziif3#

嗯。我想你想要:

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;

相关问题