1

IFNULLステートメント内でサブクエリを使用したい

SELECT t.col1
     , IFNULL(t.col2, (SELECT an.col_11
                       FROM another_table an
                       WHERE an.col1 = t.col5)) as alias_name
     , t.col3
FROM table t;

IFNULLステートメントの 2 番目の式はサブクエリにする必要があります。

適切な構文を教えてください 私の実際のクエリは

SELECT u.username, up.gender, d.name, desg.name, 
IFNULL(up.creative_lead_id, 
    (SELECT au.username FROM auth_user au 
     WHERE au.id=up.creative_lead_id)) as creative_lead, up.image 
FROM user_profile up, department d, designation, auth_user 
WHERE up.department_id=d.id 
AND up.designation_id = desg.id up.auth_uesr_id = u.id;

このクエリは、IFNULL ステートメントのために構文エラーを出しています。

4

2 に答える 2

1

結合を使用してクエリを書き直すことができます。相関クエリはテーブルの各行に対して実行され、パフォーマンスに影響を与える可能性があります

SELECT 
  t.col1,
  IFNULL(t.col2, an.col_11) AS alias_name,
  t.col3 
FROM
  `table` t 
  LEFT JOIN another_table an 
    ON an.col1 = t.col5 
于 2014-09-18T07:22:08.047 に答える
0

この状況ではサブクエリを使用しないでください。代わりにそのようなクエリを試してください (ジョイントの使用):

SELECT t.col1
    ,IFNULL(t.col2, an.col_11) AS alias_name
    ,t.col3
FROM your_table t
LEFT JOIN another_table an ON an.col1 = t.col5

完全なクエリでup.creative_lead_idは、句に 2 回使用していますIFNULL(最初のパラメーターとして 1 回、次にサブクエリで 1 回)。NULL最初のパラメーターが の場合、サブクエリは結果を返さないため、意味がありません!

あなたの問題を解決する原則を示すために、最初のパラメーターを架空のものに置き換えましたup.creative_lead. この架空の列は、テーブルuser_profileに保存されているクリエイティブ リードの名前です。この値が null の場合、usernameに対応するユーザーの を探していますcreative_lead_id

上記の修正で問題を解決する完全なクエリを次に示します。

SELECT u.username
    ,up.gender
    ,d.name
    ,desg.name
    ,IFNULL(up.creative_lead, cl.username) AS creative_lead
    ,up.image
FROM user_profile up
INNER JOIN department d ON d.id = up.department_id
INNER JOIN designation desg ON desg.id = up.designation_id
INNER JOIN auth_user u ON u.id = up.auth_user_id
INNER JOIN auth_user cl ON cl.id = up.creative_lead_id

クエリの構文を変更したことに注意してください。ジョイントに古い構文を使用しないことを強くお勧めします (JOIN代わりに明示的な句を使用してください)。

これがあなたを助けることを願っています。

于 2014-09-18T07:22:56.493 に答える