我该如何执行此MySQL查询?

时间:2011-11-25 22:42:43

标签: mysql sql database

假设我有一个名为“审批”的表。

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 ?

(换句话说,如果Jessica批准Matt,但Matt不批准Jessica,则查询不会显示。)

3 个答案:

答案 0 :(得分:3)

尝试(根据评论更正)

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

答案 1 :(得分:2)

如果我理解正确的话,

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

我想。

答案 2 :(得分:0)

出于演示目的,我修改了您的表以使用varchars作为用户ID,但是int将以相同的方式工作。

因为这个要求

  

如果Jessica批准Matt,但Matt不批准Jessica,则查询不会显示

您需要在ID上进行两次自我加入,而不是一次。其他明智的Eeyore会出现在你的结果中。

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 query

中查看此操作