我有一个带有变量$ lid的php页面和一个带有可变$ uid的用户......我需要从2个表中选择一些数据来填充页面。
Table 1 Table 2
¦----------¦----------¦ ¦----------¦----------¦----------¦
¦ qid ¦ lid ¦ ¦ owner ¦ qid ¦timestamp ¦
¦----------¦----------¦ ¦----------¦----------¦----------¦
我需要编写一个SQL语句,从表2中获取所有内容,其中owner = $ uid如果qid尚未在table1中列出,当前页面为'$ lid。
我试过
SELECT * FROM table_two WHERE qid != (SELECT qid FROM table_one WHERE lid = " . $lid .") AND owner = " . $uid . ";
但没有快乐
有什么想法吗?
答案 0 :(得分:7)
这样可行:
SELECT *
FROM table_two
WHERE qid not in (
SELECT qid
FROM table_one
WHERE lid = " . $lid .")
这可能会表现得更好:
SELECT T2.*
FROM table_two t2
LEFT OUTER JOIN table_one T1 ON T2.QID = T1.QID
AND T1.LID = " . $lid ."
WHERE T1.qid IS NULL
答案 1 :(得分:3)
您应该使用LEFT JOIN
来获得最佳效果:
SELECT a.*
FROM table_two a
LEFT JOIN table_one b
ON a.qid = b.qid AND
b.lid = " . $lid ."
WHERE b.qid IS NULL;
答案 2 :(得分:1)
SELECT * FROM table_two WHERE qid NOT IN (SELECT qid FROM table_one WHERE lid = " . $lid .")
使用NOT IN
子句。这会为您提供不在subquery
中的ID。
修改强>
你也可以使用Left-Join
,在MSSQL
中效率较低,但这是MySQL
(我没有注意到),所以它们运行相同。你可以看到它here
答案 3 :(得分:1)
SELECT * FROM table_two WHERE qid not in
(SELECT qid FROM table_one WHERE lid = " . $lid .")
答案 4 :(得分:0)
您建议使用:
SELECT *
FROM table_two
WHERE qid not in (
SELECT qid
FROM table_one
WHERE lid = " . $lid .")
我也有相同的prblm,但我替换机智“notin”它起作用了我
答案 5 :(得分:-1)
我会说使用
SELECT * FROM table_two WHERE NOT EXISTS (SELECT NULL FROM table_one WHERE lid = " . $lid .")
使用NOT EXISTS子句将为您提供比NOT IN更好的查询计划。