Как бы я выполнил этот MySQL Query? - PullRequest
0 голосов
/ 26 ноября 2011

Предположим, у меня есть таблица, называемая "утверждениями".

mysql> desc approval;
+-------------+------------+------+-----+---------+----------------+
| Field       | Type       | Null | Key | Default | Extra          |
+-------------+------------+------+-----+---------+----------------+
| id          | int(11)    | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)    | NO   |     | NULL    |                |
| to_user_id  | int(11)    | NO   |     | NULL    |                |
+-------------+------------+------+-----+---------+----------------+

Допустим, Джессика утверждает Мэтта.Джессика будет user_id, а Мэтт будет to_user_id.

Как мне выполнить этот запрос?

SELECT * WHERE to_user_id = matt AND matt also approved that person ?

(другими словами, если Джессика одобрит Мэтта, ноМэтт не одобряет Джессику, тогда запрос не появится.)

Ответы [ 3 ]

3 голосов
/ 26 ноября 2011

попытка (исправлено согласно комментариям)

SELECT * 
FROM approvals A 
INNER JOIN approvals B 
ON A.user_id = B.to_user_id AND B.user_id = A.to_user_id 
WHERE A.to_user_id = matt
2 голосов
/ 26 ноября 2011

Если я вас правильно понимаю,

select * from approvals a1 join approvals a2 where a1.user_id=a2.to_user_id and a2.user_id=a1.to_user_id

Я думаю.

0 голосов
/ 26 ноября 2011

В демонстрационных целях я изменил вашу таблицу, чтобы использовать varchars для идентификаторов пользователя, но целые числа будут работать так же.

Из-за этого требования

, если Джессика одобрит Мэтта, ноМэтт не одобряет Джессику, тогда запрос не будет отображаться

Вы должны выполнить самостоятельное объединение идентификаторов дважды, а не один раз.Другой мудрый Иа появится в ваших результатах.

CREATE approvals table (id int, user_id varchar(10), to_user_id varchar(10))
INSERT INTO 
approvals
VALUES ( 1 , 'Matt' , 'Jessica' ),
( 2 , 'Jessica' , 'Matt' ),
( 3 , 'Eeyore' , 'Jessica' ),
( 4 , 'Eeyore' , 'Matt' )

SELECT * 
FROM   approvals a 
       INNER JOIN approvals b 
         ON a.user_id = b.to_user_id 
            AND b.user_id = a.to_user_id 
WHERE  a.to_user_id = 'Matt' 

Вы можете увидеть это в действии в этом запросе Data.SE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...