【发布时间】:2015-01-19 13:12:51
【问题描述】:
我有两张桌子, 人 和朋友。 FRIENDS 有 NAME 和 SURNAME 字段。
一个人有 N 个朋友。
我想检索至少有两个 FRIEND 的所有 PERSON,一个名字为“mark”,另一个名字为“rocco”,姓氏为“siffredi”。
示例:如果我有一个人有 5 个朋友,其中一个叫 mark,没有一个叫 rocco siffredi,则不返回任何表格。
我在想:
SELECT * FROM person p
JOIN friends AS f ON p.ID=f.personID
WHERE f.name ="mark" AND f IN
( SELECT * from FRIENDS WHERE name="rocco" and surname="siffredi")
或
SELECT * FROM person p
JOIN friends AS f1 ON p.ID=f1.personID
JOIN friends AS f2 ON p.ID=f2.personID
WHERE f1.name="mark" AND f2.name="rocco" AND f2.surname="siffredi"
最好的方法是什么?我的意思是执行它的最快方法。 我不在乎可读性。 还有其他方法可以执行此查询吗? 泰。
编辑:在 ID 上添加了联接...
【问题讨论】:
-
“最好”是什么意思?为了便于阅读,我会使用
WHERE EXISTS (...name="mark") AND EXISTS (...name.="rocco" AND surname="siffredi")。 -
FK 应该反过来。如果 FK 在
Person表上,那么每个人只能有一个朋友。 -
编辑了 FK。编辑了预期的“最佳”
标签: sql sql-server logical-operators