Mysql 下面的SQL查询
表A具有当前的Mysql 下面的SQL查询,mysql,sql,oracle,sequelpro,Mysql,Sql,Oracle,Sequelpro,表A具有当前的值A和值B: Token ValueA ValueB ABC SHOP Val1 DEF SHOP Val2 GHI SHIPP Val3 JKL SHIPP Val2 表B包含所有数据转换: Token Value Value2 Date Express
值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;
查询结果:
Token ValueA Val1 Date Val2 Date
ABC SHOP . 2020-01-01 2020-02-01
DEF SHOP 2020-05-01. 2020-04-01
将
WHERE
条件移动到JOIN
中:
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;
注意:该标记仅适用于Ruby ORM。另外,请努力想出一个更具描述性的标题。请参阅“”及其链接页面。“写一个标题,总结具体问题”。