我有两张桌子
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 :(得分: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