我有两张桌子,例如:
Table A Table B
+---------------+ +------------------------------+
| ID NAME | | ID TYPE DATE |
+---------------+ +------------------------------+
| 001 A | | 001 URGE 2024-01-01 |
| 002 B | | 001 UPDATE 2024-01-02 |
| 003 C | | 002 UPDATE 2024-01-03 |
+---------------+ | 001 URGE 2023-12-30 |
+------------------------------+
我的预期结果是:
+-------------------------------------+
| ID NAME TYPE DATE |
+-------------------------------------+
| 001 A URGE 2024-01-01 |
| 002 B - - |
| 003 C - - |
+-------------------------------------+
我想选择表A中的所有结果,并以条件“TYPE = 'URGE'”连接表B并输出最近的DATE,否则DATE列输出NULL。 SQL应该怎么写?
试试这个代码:
SELECT
A.ID,
A.NAME,
B.TYPE,
B.DATE
FROM
TableA A LEFT JOIN
(select * from TableB where TYPE='URGE') B
ON A.ID = B.ID ;
你可以尝试吗:
SELECT
A.ID,
A.NAME,
CASE WHEN B.TYPE = 'URGE' THEN B.TYPE ELSE '-' END AS TYPE,
CASE WHEN B.TYPE = 'URGE' THEN B.DATE ELSE NULL END AS DATE
FROM
TableA A
LEFT JOIN
TableB B ON A.ID = B.ID AND B.TYPE = 'URGE';
SELECT A.ID, A.NAME, COALESCE(B.TYPE, '-') AS TYPE, COALESCE(B.DATE, '-') AS DATE
FROM TableA A
LEFT JOIN TableB B
ON A.ID = B.ID
AND B.TYPE = 'URGE'