1

我有两张桌子:

任务
ID 名称到期日期完成项目 ID

项目
ID 名称到期日期完成

我需要在两个表中查询具有相同数据的行。我尝试做一个示例语句,只查找已完成 = 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胜出……

感谢所有的帮助!我会标记有效的答案,即使我不会使用它。

4

3 回答 3

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)
于 2012-08-17T20:14:15.223 回答
1

如果您只想要两个表中的值匹配,并且从 dueDate='2012-08-17' 完成 = 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
于 2012-08-17T20:19:03.630 回答
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)

这应该为您提供每个表中的所有记录 wheredueDate = "2012-08-17"completed = 0.

于 2012-08-17T20:17:17.763 回答