表XX
Day-A Day-1 Day-B Day-2 Cat Dog
---------- ---------- ---------- ---------- ----- -----
2018/01/12 NULL NULL NULL Y N
NULL NULL 2018/02/02 NULL N Y
NULL NULL 2018/01/26 NULL N Y
NULL 2018/01/15 NULL NULL Y N
NULL NULL NULL 2018/01/15 N Y
NULL NULL 2018/01/19 NULL N Y
我想要参加Day-A和Day-B,以及Day-1和Day-2。 Day-A和Day-1将被标记为' Cat&#39 ;,而Day-B和Day-2将被标记为' Dog'。 '目录'始终与“狗”
匹配我可以进行第1天和第2天比赛,但不能进行另一场比赛。
INSERT INTO T1 (Day-A, Day-1, Day-B, Day-2, c.Cat, d.Dog)
SELECT c.Day-A, c.Day-1, d.Day-B, d.Day-2
FROM calendar AS c
LEFT JOIN calendar AS d
ON ((IFNULL(c.Day-1, 'x') = IFNULL(d.Day-2, 'x')
AND IFNULL(DAYNAME(c.Day-A), 'x') = IFNULL(DAYNAME(d.Day-B), 'x'))
WHERE c.Cat = d.Dog
我匹配第1天和第2天但不是另一对。 只显示最近的日期。 在我的情况下,只显示2018/01/19,但不是2018/1/26和2018/02/02,尽管它们都是星期五。 我表中的A日和B日可能有几个月不同。
我想要的表格结果:
Id Day-A Day-1 Day-B Day-2 Cat Dog
--- ---------- ---------- ---------- ---------- ----- -----
1 2018/01/12 NULL 2018/01/19 NULL Y Y
2 2018/01/12 NULL 2018/01/26 NULL Y Y
3 2018/01/12 NULL 2018/02/02 NULL Y Y
4 NULL 2018/01/15 NULL 2018/01/15 Y Y
DAYNAME()匹配是否可以有多个结果?
答案 0 :(得分:2)
你其实非常接近。 I built an SQLFiddle并在其中填入您的数据。您在上面提供的查询产生了以下结果:
Day_A Day_1 Day_B Day_2 Cat Dog
(null) (null) (null) (null) N N
(null) (null) (null) (null) N N
(null) (null) (null) (null) N N
(null) (null) (null) (null) N N
2018-01-12 (null) 2018-02-02 (null) Y Y
2018-01-12 (null) 2018-01-26 (null) Y Y
(null) (null) (null) (null) N N
(null) (null) (null) (null) N N
(null) (null) (null) (null) N N
(null) (null) (null) (null) N N
(null) 2018-01-15 (null) 2018-01-15 Y Y
2018-01-12 (null) 2018-01-19 (null) Y Y
乍一看,这看起来与预期结果完全不同,直到您意识到唯一的区别是DAY_A,DAY_1,DAY_B和DAY_2中所有具有NULL值的行。因此,如果我们消除DAY_A,DAY_1,DAY_B和DAY_2都为NULL的行,那么我们应该是好的:
SELECT c.Day_A, c.Day_1, d.Day_B, d.Day_2, c.Cat, d.Dog
FROM calendar AS c
LEFT JOIN calendar AS d
ON IFNULL(c.Day_1, 'x') = IFNULL(d.Day_2, 'x') AND
IFNULL(DAYNAME(c.Day_A), 'x') = IFNULL(DAYNAME(d.Day_B), 'x')
WHERE c.Cat = d.Dog AND
(c.DAY_A IS NOT NULL OR
c.DAY_1 IS NOT NULL OR
d.DAY_B IS NOT NULL OR
d.DAY_2 IS NOT NULL)
产生
Day_A Day_1 Day_B Day_2 Cat Dog
2018-01-12 (null) 2018-02-02 (null) Y Y
2018-01-12 (null) 2018-01-26 (null) Y Y
(null) 2018-01-15 (null) 2018-01-15 Y Y
2018-01-12 (null) 2018-01-19 (null) Y Y
这似乎是想要的。
祝你好运。