@@ -8467,5 +8467,228 @@ ON t2.a = foo.a
84678467+---+---+---+
84688468(1 row)
84698469
8470+ !ok
8471+
8472+ WITH
8473+ A(id) AS (VALUES (101), (102)),
8474+ C(id) AS (VALUES (301), (302)),
8475+ B(id, fk_A, fk_C) AS (VALUES (201, 101, 301), (202, 101, 999), (203, 999, 301), (204, 999, 999))
8476+ SELECT A.id, C.id
8477+ FROM A
8478+ INNER JOIN C
8479+ ON (
8480+ SELECT min(B.fk_C)
8481+ FROM B
8482+ WHERE A.id = B.fk_A
8483+ ) = C.id;
8484+ +-----+-----+
8485+ | ID | ID |
8486+ +-----+-----+
8487+ | 101 | 301 |
8488+ +-----+-----+
8489+ (1 row)
8490+
8491+ !ok
8492+
8493+ WITH
8494+ A(id) AS (VALUES (101), (102)),
8495+ C(id) AS (VALUES (301), (302)),
8496+ B(id, fk_A, fk_C) AS (VALUES (201, 101, 301), (202, 101, 999), (203, 999, 301), (204, 999, 999))
8497+ SELECT A.id, C.id
8498+ FROM (
8499+ SELECT
8500+ *,
8501+ (SELECT min(B.fk_C) FROM B WHERE A.id = B.fk_A) AS fk_C
8502+ FROM A
8503+ ) AS A
8504+ INNER JOIN C
8505+ ON fk_c = C.id;
8506+ +-----+-----+
8507+ | ID | ID |
8508+ +-----+-----+
8509+ | 101 | 301 |
8510+ +-----+-----+
8511+ (1 row)
8512+
8513+ !ok
8514+
8515+ WITH
8516+ A(id) AS (VALUES (101), (102)),
8517+ C(id) AS (VALUES (301), (302)),
8518+ B(id, fk_A, fk_C) AS (VALUES (201, 101, 301), (202, 101, 999), (203, 999, 301), (204, 999, 999))
8519+ SELECT A.id, C.id
8520+ FROM A
8521+ LEFT JOIN C
8522+ ON (
8523+ SELECT min(B.fk_C)
8524+ FROM B
8525+ WHERE A.id = B.fk_A
8526+ ) = C.id;
8527+ +-----+-----+
8528+ | ID | ID |
8529+ +-----+-----+
8530+ | 101 | 301 |
8531+ | 102 | |
8532+ +-----+-----+
8533+ (2 rows)
8534+
8535+ !ok
8536+
8537+ WITH
8538+ A(id) AS (VALUES (101), (102)),
8539+ C(id) AS (VALUES (301), (302)),
8540+ B(id, fk_A, fk_C) AS (VALUES (201, 101, 301), (202, 101, 999), (203, 999, 301), (204, 999, 999))
8541+ SELECT A.id, C.id
8542+ FROM (
8543+ SELECT
8544+ *,
8545+ (SELECT min(B.fk_C) FROM B WHERE A.id = B.fk_A) AS fk_C
8546+ FROM A
8547+ ) AS A
8548+ LEFT JOIN C
8549+ ON fk_c = C.id;
8550+ +-----+-----+
8551+ | ID | ID |
8552+ +-----+-----+
8553+ | 101 | 301 |
8554+ | 102 | |
8555+ +-----+-----+
8556+ (2 rows)
8557+
8558+ !ok
8559+
8560+ WITH
8561+ A(id) AS (VALUES (101), (102)),
8562+ C(id) AS (VALUES (301), (302)),
8563+ B(id, fk_A, fk_C) AS (VALUES (201, 101, 301), (202, 101, 999), (203, 999, 301), (204, 999, 999))
8564+ SELECT A.id, C.id
8565+ FROM C
8566+ RIGHT JOIN A
8567+ ON (
8568+ SELECT min(B.fk_C)
8569+ FROM B
8570+ WHERE A.id = B.fk_A
8571+ ) = C.id;
8572+ +-----+-----+
8573+ | ID | ID |
8574+ +-----+-----+
8575+ | 101 | 301 |
8576+ | 102 | |
8577+ +-----+-----+
8578+ (2 rows)
8579+
8580+ !ok
8581+
8582+ WITH
8583+ A(id) AS (VALUES (101), (102)),
8584+ C(id) AS (VALUES (301), (302)),
8585+ B(id, fk_A, fk_C) AS (VALUES (201, 101, 301), (202, 101, 999), (203, 999, 301), (204, 999, 999))
8586+ SELECT A.id, C.id
8587+ FROM C
8588+ RIGHT JOIN (
8589+ SELECT
8590+ *,
8591+ (SELECT min(B.fk_C) FROM B WHERE A.id = B.fk_A) AS fk_C
8592+ FROM A
8593+ ) AS A
8594+ ON fk_c = C.id;
8595+ +-----+-----+
8596+ | ID | ID |
8597+ +-----+-----+
8598+ | 101 | 301 |
8599+ | 102 | |
8600+ +-----+-----+
8601+ (2 rows)
8602+
8603+ !ok
8604+
8605+ WITH
8606+ A(id) AS (VALUES (101), (102)),
8607+ C(id) AS (VALUES (301), (302)),
8608+ B(id, fk_A, fk_C) AS (VALUES (201, 101, 301), (202, 101, 999), (203, 999, 301), (204, 999, 999))
8609+ SELECT A.id, C.id
8610+ FROM C
8611+ LEFT JOIN A
8612+ ON (
8613+ SELECT min(B.fk_C)
8614+ FROM B
8615+ WHERE A.id = B.fk_A
8616+ ) = C.id;
8617+ +-----+-----+
8618+ | ID | ID |
8619+ +-----+-----+
8620+ | 101 | 301 |
8621+ | | 302 |
8622+ +-----+-----+
8623+ (2 rows)
8624+
8625+ !ok
8626+
8627+ WITH
8628+ A(id) AS (VALUES (101), (102)),
8629+ C(id) AS (VALUES (301), (302)),
8630+ B(id, fk_A, fk_C) AS (VALUES (201, 101, 301), (202, 101, 999), (203, 999, 301), (204, 999, 999))
8631+ SELECT A.id, C.id
8632+ FROM C
8633+ LEFT JOIN (
8634+ SELECT
8635+ *,
8636+ (SELECT min(B.fk_C) FROM B WHERE A.id = B.fk_A) AS fk_C
8637+ FROM A
8638+ ) AS A
8639+ ON fk_c = C.id;
8640+ +-----+-----+
8641+ | ID | ID |
8642+ +-----+-----+
8643+ | 101 | 301 |
8644+ | | 302 |
8645+ +-----+-----+
8646+ (2 rows)
8647+
8648+ !ok
8649+
8650+ WITH
8651+ A(id) AS (VALUES (101), (102)),
8652+ C(id) AS (VALUES (301), (302)),
8653+ B(id, fk_A, fk_C) AS (VALUES (201, 101, 301), (202, 101, 999), (203, 999, 301), (204, 999, 999))
8654+ SELECT A.id, C.id
8655+ FROM A
8656+ RIGHT JOIN C
8657+ ON (
8658+ SELECT min(B.fk_C)
8659+ FROM B
8660+ WHERE A.id = B.fk_A
8661+ ) = C.id;
8662+ +-----+-----+
8663+ | ID | ID |
8664+ +-----+-----+
8665+ | 101 | 301 |
8666+ | | 302 |
8667+ +-----+-----+
8668+ (2 rows)
8669+
8670+ !ok
8671+
8672+ WITH
8673+ A(id) AS (VALUES (101), (102)),
8674+ C(id) AS (VALUES (301), (302)),
8675+ B(id, fk_A, fk_C) AS (VALUES (201, 101, 301), (202, 101, 999), (203, 999, 301), (204, 999, 999))
8676+ SELECT A.id, C.id
8677+ FROM (
8678+ SELECT
8679+ *,
8680+ (SELECT min(B.fk_C) FROM B WHERE A.id = B.fk_A) AS fk_C
8681+ FROM A
8682+ ) AS A
8683+ RIGHT JOIN C
8684+ ON fk_c = C.id;
8685+ +-----+-----+
8686+ | ID | ID |
8687+ +-----+-----+
8688+ | 101 | 301 |
8689+ | | 302 |
8690+ +-----+-----+
8691+ (2 rows)
8692+
84708693!ok
84718694# End sub-query.iq
0 commit comments