2016-10-13 11 views
2

クエリに問題があります。1つのクエリで2回選択し、

このような私のクエリビュー:

SELECT 
      Tab1.`name`, 
      Tab1.`removed`, 
      Raq.`removed`, 
      Raq.`type`, 
      (select `value` from `raq_add` where `raq_id` = `Tab1`.`raq_id` and `key` = 'v') as `v` 

FROM `reservation` `Reservation` 
      left join `tab1` `Tab1` on `Tab1`.`id` = `Reservation`.`tab1_id` 
      left join `raq` `Raq` on `Raq`.`id` = `Tab1`.`raq_id` 
WHERE 1 

オーケー、このクエリの仕事完全に、私はどここのように変数を追加する必要があります。

WHERE `v` = 4 

全コード:

SELECT 
      Tab1.`name`, 
      Tab1.`removed`, 
      Raq.`removed`, 
      Raq.`type`, 
      (select `value` from `raq_add` where `raq_id` = `Tab1`.`raq_id` and `key` = 'v') as `v` 

FROM `reservation` `Reservation` 
      left join `tab1` `Tab1` on `Tab1`.`id` = `Reservation`.`tab1_id` 
      left join `raq` `Raq` on `Raq`.`id` = `Tab1`.`raq_id` 
WHERE `v` = 4 

私はこの変数をSelectに加えるべきであることを知っています:

(select `value` from `raq_add` where `raq_id` = `Tab1`.`raq_id` and `key` = 'v' and `value` = 4) as `v` 

しかし、その後、彼らはnullとして表示され、私はすべてのか、彼らがvまたはvalue異なっていることを示しているでそれらを表示したくないvalue!= 4

というフィールドは、ジャスト

答えて

1

あなたはインナーを使用して一致する行のみが必要な場合左結合の代わりに結合する

SELECT 
      Tab1.`name`, 
      Tab1.`removed`, 
      Raq.`removed`, 
      Raq.`type`, 
      (select `value` 
       from `raq_add` 
       where `raq_id` = `Tab1`.`raq_id` and `key` = 'v') as `v` 

FROM `reservation` `Reservation` 
      INNER join `tab1` `Tab1` on `Tab1`.`id` = `Reservation`.`tab1_id` 
      INNER join `raq` `Raq` on `Raq`.`id` = `Tab1`.`raq_id` 
WHERE (select `value` 
       from `raq_add` 
       where `raq_id` = `Tab1`.`raq_id` and `key` = 'v') = 4 
1

に表示されません。その後、あなたはWHERE句で、それによってフィルタリングすることができます、別の選択でクエリをラップ:

SELECT * 
FROM (Your Query Here) t 
WHERE t.v = 4 
関連する問題