[英]How would I perform this MySQL Query?
假设我有一个名为“ approvals”的表。
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 | |
+-------------+------------+------+-----+---------+----------------+
假设杰西卡(Jessica)批准马特(Matt)。 杰西卡(Jessica)是user_id
,马特(Matt)是to_user_id
。
如何运行此查询?
SELECT * WHERE to_user_id = matt AND matt also approved that person ?
(换句话说,如果杰西卡批准了马特,但马特不同意杰西卡,那么该查询将不会显示。)
试试(根据评论更正)
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
如果我理解正确,
select * from approvals a1 join approvals a2 where a1.user_id=a2.to_user_id and a2.user_id=a1.to_user_id
我认为。
出于演示目的,我修改了您的表以将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查询中看到此操作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.