以下内容的SQL查询

问题描述 投票:0回答:1

表A :(具有当前值A和值B)

Token     ValueA     ValueB 
ABC        SHOP Val1      
DEF        SHOP         Val2
GHI         SHIPP        Val3
JKL         SHIPP         Val2

表B :(具有所有数据转换)

Token      Value         Value2         Date                         Express
ABC     SHOP    Val1               2020-01-01             Yes
ABC.        SHOP       Val2               2020-02-01             Yes
ABC         SHIPP.      Val3               2020-03-01              Yes 
DEF          SHOP       Val1               2020-05-01               No
DEF          SHIPP       Val2               2020-04-01              No
DEF          SHIPP.      Val3               2020-03-01               No

预期结果:(应包括表A中的最新数据,但要添加表B中的特定日期)

Token     ValueA       Val1 Date       Val2 Date
ABC        SHOP . 2020-01-01       2020-02-01
DEF        SHOP          2020-05-01.      2020-04-01   
GHI         SHIPP         NULL          NULL
JKL         SHIPP        NULL           NULL

我的查询如下,并且未返回预期的结果:

SELECT a.token,
              A.valueA,
              A.valueB,
              B.Express
       c.Date "SHOP DATE",
       d.Date “SHIP DATE"
FROM TableA A 
LEFT JOIN TABLEB B ON A.Token = B.Token
LEFT JOIN TABLEB C ON A.Token = B.Token
LEFT JOIN TABLEB D ON A.Token = B.Token
WHERE (c.value = ‘SHOP’ AND c.value2 = ‘Val1’)
  AND (c.value = ‘SHIP’ AND c.value2 = ‘Val13)
GROUP BY a.token
ORDER BY b.date DESC;

Query Result:

Token     ValueA       Val1 Date       Val2 Date
ABC        SHOP . 2020-01-01       2020-02-01
DEF        SHOP          2020-05-01.      2020-04-01   
mysql sql oracle sequelpro
1个回答
1
投票

按如下所示在JOIN内移动WHERE条件。

SELECT a.token,
              A.valueA,
              A.valueB,
              B.Express
       c.Date "SHOP DATE",
       d.Date "SHIP DATE"
FROM TableA A 
LEFT JOIN TABLEB B 
ON A.Token = B.Token

LEFT JOIN TABLEB C 
ON A.Token = B.Token
AND c.value = 'SHOP' AND c.value2 = 'Val1'
AND c.value = 'SHIP' AND c.value2 = 'Val3'

LEFT JOIN TABLEB D 
ON A.Token = B.Token

GROUP BY a.token
ORDER BY b.date DESC;
© www.soinside.com 2019 - 2024. All rights reserved.