2017-11-01 23 views
-1

私はこのクエリがありますMySQLのクエリLEFT OUTER JOINは、AND IFNULL

SELECT st.st_id, st.id, st.name, at.status, at.date 
FROM st,at 
WHERE st.st_id = at.at_id; 

を私は結果はstテーブルのすべてを返したいst .st_idがat .st_idに存在する場合、ステータス列は何でありますatテーブル、ステータスが 'H'でない場合は、誰でも手伝うことができますか? FROM句の this is my table column

+0

ある場合?私はなぜあなたが 'どこでst.st_id = at.at_id;と言うのか分からないので、この質問をお願いします。 –

+0

こんにちは。してください:コードの書式設定について読む。 [テキストのためのリンク/画像ではなくテキストを使用](https://meta.stackoverflow.com/a/285557/3404097)。 [mcve]を読んで行動してください。これはよくある質問です。あなたのアプリケーション固有の名前がなくても、常にあなたの質問/問題/目標の多くの明確で簡潔な特定の言葉遣いをグーグルで見つけ、多くのヒットを読んでください。答えが見つからない場合は、タイトルとして1つのフレーズを使用します。 [ask]を読んで行動する。 – philipxy

+0

@PierreRobentzCassion照会するためにFKや他の制約を知る必要はありません。ここでは、st.st_id = at.at_idのときに状態を望むことだけを受け入れることができます。これらの列または他の列の間でFKを宣言できるかどうかは関係ありません。 (参照されたテーブルがPKまたはUNIQUE NOT NULLであり、参照されたカラムの値がすべてその中にある場合、FKは宣言できます) – philipxy

答えて

0

/使用IFNULL DBはMYSQL/

st_id` `at_id`または` at`テーブル `で` st`テーブルの外部キーは何
SELECT st.st_id, st.id, st.name, IFNULL(at.status,'H') as status, at.date 
FROM st LEFT JOIN 
    at 
    ON st.st_id = at.at_id; 
0

決して使用コンマ。 常には、適切で明示的なJOIN構文を使用します。

SELECT st.st_id, st.id, st.name, COALESCE(at.status, 'H') as status, at.date 
FROM st LEFT JOIN 
    at 
    ON st.st_id = at.at_id; 
0

まず私はあなたがあなたのクエリが何をしたいのかを理解してみましょう:

  1. クエリしなければならないすべてのstどこst.st_id = at.at_id
  2. st.st_id = at.st_idあれば、クエリを書くことが容易になるだろうat.status = status else status='H'

私が提案するスクリプト:

SELECT st.st_id, st.id, st.name, IF(st.st_id = at.st_id, at.status, 'H') AS status, at.date FROM st LEFT JOIN at ON st.st_id = at.at_id;

0
SELECT st.st_id, 
      st.id, 
      st.name, 
      st.cl_id, 
      st.gender, 
      CASE WHEN ISNULL(at.st_id) THEN 'H' ELSE at.status 
    FROM `st` 
    LEFT JOIN `at` ON `st`.`st_id` = `at`.`st_id` 
関連する問題