Я не мастер в запросах, поэтому мне нужна помощь... У меня есть следующий запрос:
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 |
---------------
И в основном я хочу отображать каждое устройство на пользователе, независимо от того, имеет ли этот пользователь прибыль на этом устройстве или нет, я думал о JOIN на одной и той же таблице, возможно ли это в какой-то мере?
РЕДАКТИРОВАТЬ
Таблица "user" выглядит так:
------------
|id | name |
------------
И таблица "device" выглядит так:
-------------------------------
|user_id | device_id | profit |
-------------------------------
Это должно работать:
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
то должно быть, что 1 из 2 фильтров в таблице устройства исключает его.
3
не существует на пользователя с идентификатором 22
, но я все еще хочу попробовать включить устройство 3 без какой-либо прибыли (прибыль = ноль или 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'
Хммм. Я думаю, вы хотите:
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
. Итак, если назначения столбцов верны, тогда этот более простой запрос будет работать:
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;
day
?day
также сохраняется в таблицеdevice