Добавить данные из второй таблицы MySQL к результату из первой - PullRequest
0 голосов
/ 29 октября 2019

У меня есть 2 таблицы:

+-----------+
|   users   |
+-----------+
|   John    |
|   Peter   |
|   Alex    |
+-----------+

и

+-----------+
|   banned  |
+-----------+
|   John    |
|   Peter   |
+-----------+

Можно ли SELECT * FROM users и объединить результат со второй таблицей, чтобы выяснить, является ли пользовательзабанен или нет?

1 Ответ

2 голосов
/ 29 октября 2019

Вы можете использовать следующее, используя LEFT JOIN:

-- with CASE WHEN
SELECT users.*, CASE WHEN banned.username IS NULL THEN 0 ELSE 1 END AS isBanned
FROM users LEFT JOIN banned ON users.username = banned.username

-- without CASE WHEN (thanks to @forpas!)
SELECT users.*, banned.username IS NOT NULL AS isBanned
FROM users LEFT JOIN banned ON users.username = banned.username

В случае, если пользователь не соответствует таблице banned, имени пользователя (и другимстолбцы тоже) NULL. Вы можете использовать CASE WHEN, чтобы проверить, является ли имя пользователя NULL.

Вы также можете использовать EXISTS вместо LEFT JOIN, чтобы получить эту дополнительную информацию:

SELECT *, EXISTS(SELECT 1 FROM banned WHERE users.username = banned.username) AS isBanned
FROM users

И есть третий вариант, использующий IF:

SELECT users.*, IF(banned.username IS NULL, 0, 1) AS isBanned
FROM users LEFT JOIN banned ON users.username = banned.username

демо на dbfiddle.uk

...