SQL:获取第一个匹配项,如果第一个为null,则获取第二个匹配项;如果两者都存在,则获取两个匹配项(PostgreSQL)
表1.1在“2014-10-02 00:00:00 UTC”和“2014-10-02”之间创建 23:59:59 UTC”和表2.0在“2014-10-02 00:00:00 UTC”之间创建 和“2014-10-02 23:59:59 UTC” 我还有一些连接和其他查询,但这对我来说很有趣 所以,如果我在第一个表的某个范围内有一些记录,我应该接受它。 如果在第一个和第二个中,则从两个值中选择一个。 如果仅在秒中-从秒开始 现在,如果其中一个表是空的,那么我的结果是空的。 如果我使用OR,我也只会有其中一个表中的记录SQL:获取第一个匹配项,如果第一个为null,则获取第二个匹配项;如果两者都存在,则获取两个匹配项(PostgreSQL),sql,postgresql,join,conditional-statements,Sql,Postgresql,Join,Conditional Statements,表1.1在“2014-10-02 00:00:00 UTC”和“2014-10-02”之间创建 23:59:59 UTC”和表2.0在“2014-10-02 00:00:00 UTC”之间创建 和“2014-10-02 23:59:59 UTC” 我还有一些连接和其他查询,但这对我来说很有趣 所以,如果我在第一个表的某个范围内有一些记录,我应该接受它。 如果在第一个和第二个中,则从两个值中选择一个。 如果仅在秒中-从秒开始 现在,如果其中一个表是空的,那么我的结果是空的。 如果我使用OR,我也只
我应该如何重写查询以获得预期结果?我建议您将查询分为两个单独的查询,一个针对
表1
日期进行测试,另一个针对表2
日期进行测试。然后,您可以使用UNION ALL
将它们组合起来,这将产生您所要求的行为
样本:
SELECT t1.Data1, ...
FROM Table1 t1
INNER JOIN Table2 t2 ON ...
WHERE t1.Created_at BETWEEN '2014-10-02 00:00:00 UTC' AND '2014-10-02 23:59:59 UTC'
UNION ALL
SELECT t1.Data1, ...
FROM Table1 t1
INNER JOIN Table2 t2 ON ...
WHERE t2.Created_at BETWEEN '2014-10-02 00:00:00 UTC' AND '2014-10-02 23:59:59 UTC'
编辑
根据你的例子,我会这样做:
SELECT COUNT(*) AS count_all,
users.id AS users_id
FROM
(
SELECT users.id
FROM "users"
LEFT JOIN table1 ON table1.col1_id = cols1.id
LEFT JOIN table2 ON table2.col2_id = cols2.id
WHERE "users"."role_id" IN (1,2,4,5,6,7,8)
AND table1.created_at BETWEEN '2014-09-27 00:00:00 UTC' AND '2014-10-03 23:59:59 UTC'
UNION ALL
SELECT users.id
FROM "users"
LEFT JOIN table1 ON table1.col1_id = cols1.id
LEFT JOIN table2 ON table2.col2_id = cols2.id
WHERE "users"."role_id" IN (1,2,4,5,6,7,8)
AND table2.created_at BETWEEN '2014-09-27 00:00:00 UTC' AND '2014-10-03 23:59:59 UTC'
)
GROUP BY users.id
试试这个:
SELECT *
FROM table1
WHERE table1.created_at BETWEEN '2014-10-02 00:00:00 UTC' AND '2014-10-02 23:59:59 UTC'
UNION ALL
SELECT *
FROM table2
WHERE table2.created_at BETWEEN '2014-10-02 00:00:00 UTC' AND '2014-10-02 23:59:59 UTC'
确保表1的列数与表2的列数相同。PostgreSQL。在标记中更新,将连接条件的逻辑从
和
切换到或
。我已经添加了Paste和我的示例,请根据它应用您的联合所有示例,请:根据您想要的显示,这应该可以做到。我已经添加了Paste和我的示例,根据它应用您的联合所有示例,请问:什么是cols1和cols2,没有这样的别名?它只是表中的另一列。什么表包含这些列?表1和表2相应地,如左图所示