mySQL查询:涉及2个表

时间:2011-10-10 21:00:48

标签: mysql sql

我有两张桌子

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+")));"

但似乎没有工作说语法错误......任何人都可以帮我解决这个问题。

努力表示赞赏...非常感谢

4 个答案:

答案 0 :(得分: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) "

答案 1 :(得分:1)

请使用加入查询:

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

答案 2 :(得分:1)

您可以通过限制联接条件来缩小搜索结果范围。由于您必须在多个id上加入table2,因此必须连接两次并为表名设置别名。

我相信这样的事情可以解决问题:

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};

答案 3 :(得分:0)

你可以做类似的事情。

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