[SQL] MySQL의 여러 Where 절
SQLMySQL의 여러 Where 절
나는이 같은 테이블이 있습니다 :
id image_id style_id style_value
-----------------------------------
1 45 24 red
1 45 25 big
1 47 26 small
1 45 27 round
1 49 28 rect
나는 경우 image_id 열을 먹고 싶어 :
나는이 같은 쿼리을 가지고 :
$query = mysql_query("SELECT image_id FROM list WHERE (style_id = 24 AND style_value = 'red') AND (style_id = 25 AND style_value = 'big') AND (style_id = 27 AND style_value = 'round')
하지만 어떤 결과를 가져올 수 없습니다. 내가 또는이 샘플을 만들 때 잘 작동합니다. 그러나 나는이 작업을 수행해야합니다. 난 둘 다 ", 크고 RECT 빨간색"하는 이미지 아이디의 필요 때문입니다.
나는 구글과 검색을 많이 만든 그러나 어떤 해결책을 찾을 수 없습니다.
해결법
-
==============================
1.난 당신이 후라고 생각 :
난 당신이 후라고 생각 :
SELECT image_id FROM list WHERE (style_id, style_value) IN ((24,'red'),(25,'big'),(27,'round')) GROUP BY image_id HAVING count(distinct style_id, style_value)=3
당신은 사용할 수 없으며, 값은 빨강 (24) 큰 (25)과 같은 행에 같은 시간에 27 라운드를 할 수 없기 때문에,하지만 당신은 같은 image_id에서, style_id, 여러 행에 style_value의 존재를 확인해야합니다.
이 쿼리에서 나는 IN (즉,이 특정 예에서, OR에 해당) 사용하고, 나는 일치하는 별개의 행을 계산하고있다. 3 개 별개의 행이 일치하는 경우, 모든 3 개 속성이 그 image_id에 존재하는 것을 의미하며, 내 쿼리를 반환합니다.
-
==============================
2.
SELECT a.image_id FROM list a INNER JOIN list b ON a.image_id = b.image_id AND b.style_id = 25 AND b.style_value = 'big' INNER JOIN list c ON a.image_id = c.image_id AND c.style_id = 27 AND c.style_value = 'round' WHERE a.style_id = 24 AND a.style_value = 'red'
-
==============================
3.당신은 결과를 얻을하지 않습니다, 그것은 단순한 논리 오류입니다.
당신은 결과를 얻을하지 않습니다, 그것은 단순한 논리 오류입니다.
당신은 24 년 이후 = 24 AND style_id = 25 AND style_id = 26 style_id 한 행을 반환하는 데이터베이스를 요구하고 25 개의도 (26), 더 결과를 얻을 것 niether입니다.
당신은 다음 몇 가지 의미가 있습니다, 사용해야 OR.
-
==============================
4.이것은 당신이 style_id의가있다, 구현하기 까다로운 일이 될 것입니다 얼마나 많은에 따라 있지만, 이후에 무슨 수 있습니다 (하지 않도록 그 style_id 년대는 정적 또는하지 않은 경우). 이 경우, 당신이 절은 행 기준에 행에서 작동 WHERE으로 원하는 무엇을 정말 수 없습니다.
이것은 당신이 style_id의가있다, 구현하기 까다로운 일이 될 것입니다 얼마나 많은에 따라 있지만, 이후에 무슨 수 있습니다 (하지 않도록 그 style_id 년대는 정적 또는하지 않은 경우). 이 경우, 당신이 절은 행 기준에 행에서 작동 WHERE으로 원하는 무엇을 정말 수 없습니다.
WITH cte as ( SELECT image_id, max(decode(style_id,24,style_value)) AS style_colour, max(decode(style_id,25,style_value)) AS style_size, max(decode(style_id,27,style_value)) AS style_shape FROM list GROUP BY image_id ) SELECT image_id FROM cte WHERE style_colour = 'red' and style_size = 'big' and style_shape = 'round'
http://sqlfiddle.com/#!4/fa5cf/18
-
==============================
5.
select unique red24.image_id from ( select image_id from `list` where style_id = 24 and style_value = 'red' ) red24 inner join ( select image_id from `list` where style_id = 25 and style_value = 'big' ) big25 on red24.image_id = big25.image_id inner join ( select image_id from `list` where style_id = 27 and style_value = 'round' ) round27 on red24.image_id = round27.image_id
-
==============================
6.이 쿼리를 사용하고있을 수 있습니다 당신은 어떤 결과 또는 빈 결과를 얻을 수 없습니다. 당신은 대신 아래처럼 쿼리 또는 사용할 필요가있다.
이 쿼리를 사용하고있을 수 있습니다 당신은 어떤 결과 또는 빈 결과를 얻을 수 없습니다. 당신은 대신 아래처럼 쿼리 또는 사용할 필요가있다.
$query = mysql_query("SELECT image_id FROM list WHERE (style_id = 24 AND style_value = 'red') OR (style_id = 25 AND style_value = 'big') OR (style_id = 27 AND style_value = 'round');
이 쿼리를 사용해보십시오.
from https://stackoverflow.com/questions/14046637/mysql-multiple-where-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 너무 많은 시간을내어 오라클 삭제 쿼리 (0) | 2020.06.28 |
---|---|
[SQL] MYSQL 쿼리가 동일한 열에 만족시키기 (0) | 2020.06.28 |
[SQL] 각 행에 null이 아닌 컬럼의 카운트 (0) | 2020.06.28 |
[SQL] `쇼는 오라클 SQL에서 table` 동등한를 만들 (0) | 2020.06.28 |
[SQL] SQL 서버 2008 IIF 문을 사용할 것 같지 않습니다 (0) | 2020.06.28 |