仅在第一个表中不存在时才选择第二个表的行

时间:2015-12-16 10:37:58

标签: mysql

我有两个表t1和t2具有相同的结构

id INT
userid INT
date DATETIME

第一个表包含我的数据,而第二个表是一种帮助表,其中包含10个修复日期的行和userid = -1 我需要的是一个SELECT,它给我所有来自t1的行,其中userid = X连接(合并)来自t2的所有行,该日期不在t1的结果中。

伪代码

SELECT id, date
FROM t1, t2
WHERE (t1.userid=:id OR t2.userid=-1) AND t2.date NOT IN t1.date

样品:

T1:

id    userid     date
1     1          2015-12-01
2     1          2015-12-02
3     1          2015-12-03
4     2          2015-12-01
5     2          2015-12-02

T2:

id    userid    date
1     -1        2015-12-01
2     -1        2015-12-02
3     -1        2015-12-03
4     -1        2015-12-04
5     -1        2015-12-05

userid = 1的预期输出:

1      1        2015-12-01
2      1        2015-12-02
3      1        2015-12-03
4     -1        2015-12-04
5     -1        2015-12-05

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我将使用联合选择来执行此操作。

SELECT 
id, date
FROM 
t1
WHERE 
t1.id=:id
UNION ALL
(SELECT 
id, date
FROM 
t2
WHERE
t2.id=-1
AND t2.date NOT IN (SELECT date FROM t1 WHERE t1.userid=:id))