Несколько MySQL "выбрать из" в одном запросе
SELECT (SELECT user_id ОТ пользователей WHERE user_id=1) AS user_id, (SELECT usersetting_user_id ОТ usersettings WHERE usersetting_user_id=1) AS usersetting_user_id;
это возвращает:
| user_id | usersetting_user_id |
| 1 | 1 |
но я хочу отобразить всех пользователей, а не только одного. Итак, я запускаю следующее:
SELECT (SELECT user_id FROM пользователей) AS user_id, (SELECT usersetting_user_id FROM usersettings) AS usersetting_user_id;``
и получить:
ERROR 1242 (21000): Subquery returns more than 1 row
Есть идеи как обойти это?
3 ответа
Вы должны использовать join
Скажите, вот так:
SELECT u.user_id, us.usersetting_user_id
FROM users u
JOIN usersettings us ON u.user_id = us.usersetting_user_id
Это предполагает, что usersettings.usersetting_user_id является ссылкой на первичный ключ (user_id) пользователей. Подробности можно найти в руководстве.
Назначьте псевдонимы в FROM
пункт, затем используйте alias.fieldname
, Также группа SELECT
а также FROM
части
SELECT user_id.user_id, usersetting_user_id.usersetting_user_id
FROM users AS user_id, usersettings AS usersetting_user_id;
Я не рекомендую использовать в таких запросах как Joins или множественные запросы, потому что вы загружаете все таблицы, а затем фильтруете их. Это все равно что использовать Имея вместо Где. Он связан с версией mysql-сервера, но вы можете сравнить его с EXPLAIN (или EXPLAIN EXTENDED).
В вашем случае я рекомендую вам использовать одну таблицу из директивы from (базовая таблица, например, пользователи) и загружать другие данные внутренними запросами с помощью Where id = user_id.
# query with basic table only
SELECT
user_id
FROM users AS u;
# extended query
SELECT
user_id,
(SELECT usersetting_user_id
FROM usersettings
WHERE usersetting_user_id = u.user_id) AS usersetting_user_id
FROM users AS u;
Ps Если вы знаете, что в ваших таблицах одинаковое количество строк, вы можете использовать решение с Join by Tzarium, но в качестве INNER/LEFT/RIGHT JOIN вместо JOIN или OUTER JOIN.