我有两张桌子:
任务
id name dueDate已完成projectID
项目
id name dueDate已完成
我需要在两个表中查询具有相同数据的行。我尝试做一个示例语句,只是查找completed = 0的行,但从未得到任何结果。我认为它与使用OR而不是AND有关,但它现在只略高于我的水平......有什么想法吗?
TO CLARIFY,我不是在寻找重复的行,我正在寻找'所有任务和项目已完成= 0'
查询是:
SELECT * FROM "task" t, "project" p WHERE t.dueDate = "2012-08-17" OR p.dueDate = "2012-08-17" AND t.completed = 0 OR p.completed = 0
我确实设法让其中一个答案的代码能够运行,但是我意识到我的整个应用程序都是为了与一个表进行对话而写的,并且将任务和项目表组合起来并使用isProject
列,用于区分项目与任务。这也增加了在项目中嵌套项目的能力,因为项目现在也有projectID
列。
最后,KISS占上风......
感谢您的帮助!我将标记出有效的答案,即使我不会使用它。
答案 0 :(得分:1)
尝试使用括号。
SELECT * FROM "task" t, "project" p WHERE (t.dueDate = "2012-08-17" OR p.dueDate = "2012-08-17") AND (t.completed = 0 OR p.completed = 0)
答案 1 :(得分:1)
如果您只希望来自两个表的值匹配,则完成= 0来自dueDate ='2012-08-17':
您可以使用join将表结果绑定到一个表。 内部联接将仅返回两侧匹配的结果。 所以您可以使用它来匹配它们在两个表中的匹配,然后通过经典在哪里过滤您想要的值:
select * from task t inner join project p on t.dueDate = p.dueDate and t.completed = p.completed
where t.dueDate = '2012-08-17' and t.completed = 0
答案 2 :(得分:0)
请改为尝试:
SELECT dueDate, completed
FROM task AS t
WHERE (dueDate = "2012-08-17" AND completed = 0)
UNION ALL
SELECT dueDate, completed
FROM project AS p
WHERE (dueDate = "2012-08-17" AND completed = 0)
这应该为您提供dueDate = "2012-08-17"
和completed = 0
。