假设我有一个名为“审批”的表。
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,则查询不会显示。)
答案 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
中查看此操作