Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL INSERT和JOIN返回单个结果,应该返回多个结果_Mysql_Date_Dayofweek - Fatal编程技术网

MYSQL INSERT和JOIN返回单个结果,应该返回多个结果

MYSQL INSERT和JOIN返回单个结果,应该返回多个结果,mysql,date,dayofweek,Mysql,Date,Dayofweek,表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/

表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
我想匹配第A天和第B天,以及第1天和第2天。第A天和第1天将被标记为“猫”,而第B天和第2天将被标记为“狗”“猫”总是和“狗”匹配

  • A天和B天需要按天匹配,例如星期一=星期一
  • 第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
我匹配了第一天和第二天,但没有另一对。 只显示最近的日期。 在我的例子中,只显示了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()匹配是否可能有多个结果?

事实上,您已经非常接近了。并用你的数据填充它。您在上面给出的查询产生了以下结果:

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
乍一看,这与期望的结果完全不一样,直到您意识到唯一的区别是第A天、第1天、第B天和第2天中所有具有空值的行。因此,如果我们消除DAY_A、DAY_1、DAY_B和DAY_2都为空的行,我们应该是好的:

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
这似乎是我们想要的


祝您好运。

编辑您的问题以显示您尝试过的查询,即在A天和B天仅显示一个匹配项的查询。此外,编辑您的问题以显示表架构/name@SloanThrasher谢谢你纠正我。现在大家最好阅读它。对于SELECT,它可以按预期工作,但不能与INSERT INTO一起工作。您所要做的就是将查询的INSERT部分添加到此SELECT中,然后它应该可以按您的要求工作。我发现我的错误是设置了错误的主键,因此INSERT只插入1个值。