查询两个表以获取不同/单独的值

时间:2012-08-17 20:09:39

标签: php mysql

我有两张桌子:

任务
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占上风......

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

3 个答案:

答案 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

的每个表格中的所有记录