#mysql
Вопрос:
Я новичок в MySQL и уже как бы пытаюсь запросить то, что мне нужно.
Существует таблица под названием Тема, которая выглядит так
--------- ---------- ------------- ------------ ------------ --
| user_id | subject | description | created_at | updated_at | |
--------- ---------- ------------- ------------ ------------ --
| 1 | A | non | 3434343434 | 34343433 | |
| 2 | B | non | 3434343434 | 3434343434 | |
| 3 | C | non | 3434343434 | 3434343434 | |
| 3 | D | non | 3434343434 | 3434343434 | |
--------- ---------- ------------- ------------ ------------ --
и пользователь таблицы, у которого есть только столбцы user_id
и username
Я хочу получить набор имен пользователей, который существует в таблице «Тема».
SELECT DISTINCT user_id FROM Subject
дает мне набор user_id
букв «с». Как я могу использовать эти user_id
файлы и получить их usernames
из таблицы пользователей?
Спасибо!
Комментарии:
1. Используйте
IN
предложение илиEXISTS
предложение. (IN
на мой взгляд, легче писать и читать. Я бы использовалEXISTS
или более сложные вещи, гдеIN
этого недостаточно.)
Ответ №1:
Для довольно дословного перевода ваших требований мы могли бы использовать существующую логику здесь:
SELECT u.username
FROM User u
WHERE EXISTS (SELECT 1 FROM Subject s WHERE s.user_id = u.user_id);
Ответ №2:
Другой вариант-использовать inner join
select distinct u.username from User u inner join Subject s on s.user_id=u.user_id
Комментарии:
1. На мой взгляд, это плохое предложение. Зачем объединять все строки только для того, чтобы закрыть большинство из них позже? Вы создаете большой промежуточный результат, который вам на самом деле не нужен. Если вы хотите присоединиться, вместо этого присоединяйтесь к различным значениям, т. Е. присоединяйтесь с помощью подзапроса (производная таблица). Но для данной задачи
IN
они иEXISTS
гораздо более уместны, потому что существуют именно для такого типа задач.2. @ThorstenKettner спасибо за ваш комментарий, и я учусь на нем!