2011-10-10 51 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