我有两个表:
任务
ID 名称到期日期完成项目ID
项目
ID 名称到期日期完成
我需要在两个表中查询具有相同数据的行。我尝试做一个示例语句,只是寻找 complete=0 的行,但从未得到任何结果。我认为这与使用 OR 而不是 AND 有关,但它现在只比我的水平高一点......有什么想法吗?
澄清一下,我不是在寻找重复的行,而是在寻找"已完成 = 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占了上风...
感谢所有的帮助!我会标记有效的答案,即使我不会使用它。
尝试使用括号。
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)
如果您只想从 dueDate='2012-08-17' 开始仅与两个表中的值匹配且 complete=0:
可以使用 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
试试这个:
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
。