2011-10-10 27 views
0

我有兩個表的MySQL查詢:包括2臺

table 1 : id, name, age, gender. 
table 2(friend) : id1,id2. (stored only once i.e only one entry for a unique pair) 

我需要編寫一個查詢,需要一個ID,然後返回從對應於所有他/她的朋友的表1包含行的結果集。

我嘗試這個查詢

"SELECT * FROM table1 WHERE id IN (" 
+ "(SELECT id2 FROM table2 WHERE (id1="+given_id+")) UNION " 
+ "(SELECT id1 FROM table2 WHERE (id2="+given_id+")));" 

,但一點兒也不似乎工作說語法錯誤...任何人都可以幫助我解決這個查詢。

努力讚賞...非常感謝

回答

0

你可以做類似的事情。

SELECT * FROM table1 t1, table2 t2, WHERE t1.id = t2.id2 
+0

嘿對不起,我有兩個錯別字我剛纔的問題,你可以請看看編輯的版本......非常感謝+1 – koool

+2

- 1使用隱式連接語法。 (現在票數不足)。 1989年希望它的反模式回來。 – Johan

+0

有一個關係表,但他更新了他的問題,並將其刪除。檢查歷史記錄 – brenjt

2

您需要單引號given_id,否則MySQL會認爲它是列名。
如果given_id是一個數字,此代碼也可以工作。

"SELECT t1.* " 
+"FROM table1 t1 " 
+"INNER JOIN table2 t2 ON (t1.id = t2.id1 OR t1.id = t2.id2) " 
+"WHERE '"+given_id+"' IN (t2.id1, t1.id) " 
+0

但given_id是整數...所以它應該工作正確...還應該給錯誤列名稱找不到正確的? – koool

+0

但是我會試試 – koool

+0

+1努力謝謝 – koool

1

請使用連接查詢:

"SELECT `table1`.* FROM (`table1`) 
    LEFT OUTER JOIN `table2` ON 
     `table1`.`id` = `table2`.`id1` 
    WHERE `table2`.`id2` = 
    " + given_id; 
+0

+1對於努力謝謝 – koool

1

您可以通過限制對連接條件縮小搜索結果。由於您必須將您的table2連接到多個id上,因此您必須連接兩次併爲表名稱別名。

我相信這樣的事情可以做的伎倆:

SELECT table1.* 
FROM table1 
JOIN table2 t2 ON table1.id = t2.id2 
    AND t2.id1 = {given_id} 
JOIN table2 t3 ON table1.id = t3.id1 
    AND t3.id2 = {given_id}; 
+0

+1對於努力謝謝 – koool

+0

'你不能在SQL中的where語句中進行嵌套查詢這是無稽之談,你可以在任何地方做嵌套選擇,只要每個子查詢_(不在'IN'子句中)_具有自己的別名。 – Johan

+0

你是對的。不知道我在想什麼。我會編輯評論以減少誤導。 – Mjonir74