2

私は 3 つの MySQL InnoDB テーブルを持っています: 債務者 企業 個人個人

次に、債務者に関する情報を検索したいと思います。次の SQL が機能しません。機能する SQL の作成を手伝ってくれる人はいますか?

SELECT
    d.id,
    d.type,
    i.name
FROM
    debtors AS d
IF d.type = 'c' THEN
    INNER JOIN
        companies AS i ON (i.debtor_id = d.id)
ELSE THEN
    INNER JOIN
        private_individuals AS i ON (i.debtor_id = d.id)
WHERE
    d.id = 1

エラー:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF d.type = 'c' THEN INNER JOIN companies AS i ON (i.debtor_id = d.i' at line 7

前もって感謝します!

4

2 に答える 2

4

そんな使い方はできませんIF

考えられる解決策は次のとおりです。

SELECT
    d.id,
    d.type,
    COALESCE(i.name, i2.name) as name
FROM
    debtors AS d
    LEFT JOIN companies AS i ON i.debtor_id = d.id and d.type = 'c'
    LEFT JOIN private_individuals AS i2 ON i2.debtor_id = d.id and d.type <> 'c'
WHERE
    d.id = 1

もう1つは動的SQLかもしれませんが、避ける必要があります。:)

于 2012-05-07T12:53:13.630 に答える
3

これは、通常、次のようなことを達成する方法です。

SELECT d.id, d.type, COALESCE(c.name, p.name)
FROM debtors d
LEFT JOIN companies c
  ON d.type = 'c' AND c.debtor_id = d.id
LEFT JOIN private_individuals p
  ON d.type = 'p' AND p.debtor_id = d.id
WHERE d.id = 1
于 2012-05-07T12:55:33.887 に答える