繁体   English   中英

我将如何执行此MySQL查询?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM