2011-06-21 11 views
0

特定の条件で別のテーブルからデータを取得するクエリを実行しようとしています。Mysql IF条件内で選択

それは

select field1, field2.... IF(fieldX=3,select value from sub_table where cat_id = 3 order by id desc limit 0,1, NULL) from abc ; 

好きなら内のクエリが有効です。 私は問題なくif条件を実装するのに慣れていましたが、静的な値やフィールドのためのものでした。しかし、これは、私がそれを行うことができない場合に選択の結果を得ることを試みるのは初めてです。

'fieldX'の特定の値に対して、別のテーブルからレコードを取得する必要があるためです。

よろしく Junaid

答えて

0

なぜ左を使用参加し、参加条件としてfieldX=3を使わないのでしょうか? fieldXは3と異なっている場合、SQLを使用すると、対応する値のためのすべての行を取得したいならばNULL

select a.field1, a.field2, sub.value 
from abc a 
left join 
(
    select value from sub_table 
    where cat_id = 3 
    limit 0,1 
) sub 
on a.fieldX = 3 

または、(私は基本的にcat_id = fieldX、あなたがcat_id = 3fieldX = 3を持っている参照)、単に使用してフィールドを埋め単純な結合。複雑なif構文を使う必要はありません。 SQLは、高速かつ効率的に行うために建設された加入:

select a.field1, a.field2, sub.value 
from abc a 
left join sub_table sub 
on a.fieldX = sub.cat_id 

ノートをしかし、fieldXとCAT_ID間のよりマッチ(非ユニークcat_id)があるときに、第2のクエリは、複数の行を返すこと

2

ラップであなたは内側のSELECT()

IF(fieldX=3, (select value from sub_table where cat_id = 3 order by id desc limit 0,1), NULL) 
+0

ああ、あなたが1つだけのレコードをしたい場合は、制限を0,1、制限する必要はありません。 – mikeq

+0

この画像はこの質問に対する完璧な答えです。 –

0

あなたの可能性

select fields... from sub_table st 
where st.idSubTable in(
Select IF(fieldX=3 
,(
    select st.idSubTable from sub_table where cat_id = 3 order by id desc limit 0,1 
), 
    NULL) 
from abc); 

これで問題は解決します。