2017-12-14 10 views
1

내가 더 좋은 방법이 쿼리MySQL의 IN() 및 LIKE 함께

SELECT * FROM [table] WHERE 
(column1 = 'dog' AND column2 = 1) OR 
(column1 = 'cat' AND column2 = 2) OR 
(column1 = 'mouse' AND column3 = 3) OR 
(column1 = 'wolf' AND column4 = 4); 

를 다시 작성할 수 있다는 사실을 알고 :

SELECT * FROM [table] WHERE 
(column1 = 'dog' AND column2 like '%red%') OR 
(column1 = 'cat' AND column2 like '%blue%') OR 
(column1 = 'mouse' AND like '%red%') OR 
(column1 = 'wolf' AND column2 like '%green%'); 
:이 쿼리에 대해 유사한 방법

SELECT * 
FROM [table] 
WHERE (column1, column2) IN (('dog', 1), ('cat', 2), ('mouse', 3), 
('wolf', 4)); 

있다

+1

대괄호로'[table]'을 사용했기 때문에 Microsoft SQL Server를 사용하고 있다고 가정합니다. 귀하의 질문에 정확하게 태그를 달아주십시오. mysql에 SQL 질문에 대한 태그를 지정하지 마십시오. SQL 데이터베이스의 각 브랜드에는 언어에 대한 자체 확장이 있으므로 필요로하는 응답은 사용하는 브랜드에 따라 다릅니다. –

+0

또한 중복 가능 : https://stackoverflow.com/questions/1865353/combining-like-and-in-for-sql-server –

+0

이 질문은 mysql에 관한 것입니다. 나는 그것을 바꿨다. –

답변

0

아니요. 튜플 목록 형식은 예 :

(a,b) IN ((2,3) , (5,7) , (11,13)) 

은 동등한 비교에만 사용됩니다.

그러나 다른 방법으로 쿼리를 작성할 수 있습니다. 일부 쿼리는 적합한 인덱스의 가용성에 따라 다른 쿼리보다 성능이 좋을 수 있습니다.

SELECT t1.* FROM mytable t1 WHERE t1.column1 = 'dog' AND t1.column2 LIKE '%red%' 
UNION ALL 
SELECT t2.* FROM mytable t2 WHERE t2.column1 = 'cat' AND t2.column2 LIKE '%blue%' 
UNION ALL 
SELECT t3.* FROM mytable t3 WHERE t3.column1 = 'mouse' AND t3.column2 LIKE '%red%' 
UNION ALL 
SELECT t4.* FROM mytable t4 WHERE t4.column1 = 'wolf' AND t4.column2 LIKE '%green%'