2011-11-25 118 views
0

假設我有一個名爲「批准」的表格。我將如何執行此MySQL查詢?

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 ? 

(換句話說,如果傑西卡批准馬特,馬特,但不批准傑西卡,那麼查詢將不會出現。)

+0

行動中看到這個我問這個問題已經^^ http://stackoverflow.com/questions/5611125/sql-double-comparison – arik

回答

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 
+0

這將返回結果如果傑西卡批准馬特但馬特不批准傑西卡 –

+0

@ConradFrix謝謝 - 更正... – Yahia

2

如果我理解正確的話,

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

我想。

0

爲了演示的目的,我修改了您的表格以使用varchars作爲用戶標識,但整數將以同樣的方式工作。

由於這一要求

如果傑西卡批准馬特,馬特,但不批准傑西卡,那麼查詢將不會顯示

你需要做自連接上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