mysql: две таблицы, но три выбранных критерия - PullRequest
2 голосов
/ 03 февраля 2012

У меня есть две таблицы: users и user_depts.Допустим (для этого вопроса), что у пользователей есть только столбец «id», а user_depts имеет 2: «uid» и «did».

Я ищу строку SQL, которая будет возвращать все идентификаторы пользователей для всех отделов, с которыми связан данный идентификатор пользователя (скажем, 7, хотя это будет происходить динамически из PHP).

Я попробовал:

SELECT id FROM users, user_depts
WHERE users.id = user_depts.uid
AND user_depts.uid = 7

Но, конечно, это ничего не дает, кроме возврата 7. Я думаю, что мне, возможно, придется присоединить таблицу к себе, но я знаю только ярлыксинтаксис для присоединения, и это не кажется достаточным.Любые указатели будут с благодарностью!

Ответы [ 3 ]

1 голос
/ 03 февраля 2012

Использование EXISTS:

SELECT uid FROM user_depts
WHERE EXISTS (
  SELECT * FROM user_depts a
  WHERE uid = 7 AND a.did = user_depts.did
)
0 голосов
/ 03 февраля 2012

выберите UID из user_depts, где сделал in (выберите из списка user_depts, где uid = 7)

  1. Сначала выберите все действия, с которыми связан пользователь, используя подзапрос
  2. Затем выберите все user_id для выбранных отделов.

Это лучший способ сделать это. и если вы хотите удалить повторный результат, то вы можете использовать различные

0 голосов
/ 03 февраля 2012

Я ищу строку SQL, которая будет возвращать все идентификаторы пользователей для всех отделы, с которыми данный идентификатор пользователя (скажем, 7, хотя это будет происходить динамически из PHP) связано.

Если это означает, что вы хотите найти всех пользователей с идентификатором пользователя: 7, к которому подключен user_departent, это ваш запрос:

select users.id from users
inner join user_depts.uid = users.id
where users.id = 7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...