2013-07-28 3 views
0

Предположим, у меня есть таблица mySQL с именем «пользователь», которая содержит идентификатор пользователя и пароль или что-то еще. Затем у меня есть другие таблицы для разных целей, например, таблица для их любимой еды, в которой будет содержаться их любимая и любимая еда.MySQL выбор таблиц, где существует пользователь

Есть ли способ запросить таблицы, содержащие указанный идентификатор пользователя, и проверяет, есть ли у них запись в этой таблице?

Так что, если у меня есть три таблицы, называемые favorite_food, favorite_drink и favorite_candy, но у пользователя только есть значения в favorite_food и favorite_drink, я хочу, чтобы запрос возвращал favorite_food и favorite_drink.

Я новичок, и я не мог понять концепцию связи. Userid является основным ключом пользователя, а остальные таблицы ссылаются на него?

ответ

0

Подробнее о UNION. Я думаю, что это то, что вам нужно.

SELECT * from favorite_food where `userid` = 50 
UNION 
SELECT * from favorite_drink where `userid` = 50 
UNION 
SELECT * from favorite_candy where `userid` = 50 
0

В SQL "linking" представлено JOIN s. Поскольку (как вы указали) некоторые пользователи не будут иметь 1 или 2 любимых объекта, нам нужно будет использовать LEFT OUTER JOIN s. Тогда у нас будет NULL с на выходе вместо отсутствующих фаворитов.

In your case: 

SELECT u.userid, f.food_name, d.drink_name, c.candy_name 
FROM user u 
    LEFT JOIN favorite_food f ON u.userid=f.userid 
    LEFT JOIN favorite_drink d ON u.userid=d.userid 
    LEFT JOIN favorite_candy c ON u.userid=c.userid 
ORDER BY u.user.id 

Это даст вам фаворитами всех пользователей в вашем user таблице.

Смежные вопросы