2012-07-12 4 views
0

목록에 특정 필드가있는 경우 일부 레코드를 '필터링'하기 위해 많은 양의 코드가 있습니다. 표 구조와 현재 SELCT * FROM table1 ... AND value IN (8, 6, 4, 2, 9, 1, 3, 5, 7) ...MySQL은 목록의 모든 값을 다른 목록의 값과 비교합니다.

:

CREATE TABLE IF NOT EXISTS `table1` (
    `uniqueid` varchar(32) NOT NULL, 
    `value` int(11) DEFAULT NULL, 
    ... 
    PRIMARY KEY (`uniqueid`) 
) 

는 지금은 별도의 테이블에 value을 저장해야 잘 테이블에서 하나 이상의 '가치'가있을 수 있습니다.

새로운 표 구조 :

CREATE TABLE IF NOT EXISTS `table1` (
    `uniqueid` varchar(32) NOT NULL, 
    ... 
    PRIMARY KEY (`uniqueid`) 
) 

새로운 표 2 구조

CREATE TABLE IF NOT EXISTS `table2` (
    `id` int(11) NOT NULL, 
    `uniqueid` varchar(32) NOT NULL, 
    `value` int(11) DEFAULT NULL, 
    ... 
    PRIMARY KEY (`id`) 
) 

당신은 아이디어를 얻을!

제 질문은 uniqueid에 대한 table2의 레코드가 첫 번째 예에서 주어진 목록에 있는지 확인하는 것입니다.

어떤 종류의 COUNT 하위 쿼리를 사용하는 것으로 간주되었지만 확실하지 않습니다. 나는 시도했다 :

SELECT * FROM table1, table2 
      WHERE table1.uniqueid = table2.uniqueid 
      AND (SELECT COUNT(id) FROM table1, table2 
         WHERE table2.uniqueid = table1.uniqueid) > 0 
      AND table2.value IN (8, 6, ... 

그러나 그것은 wasnt한다. 그리고 나는 접근을 정말로 좋아하지 않는다, 매우 혼란하게 느낀다.

도움을 주시면 감사하겠습니다.

+0

원하는 결과 세트를 제공 할 수 있습니까? –

답변

0

두 테이블에있는 값을 찾으려면 INNER JOIN을 구현하십시오.

SELECT UniqueID 
    FROM Table1 t1 
    INNER JOIN Table2 t2 
    ON t1.UniqueID = t2.UniqueID 
    WHERE (YourCritiera); 
+0

나는 이것이 효과가 있다고 생각하지 않는다. Table2는 'uniqueid'에 대한 여러 레코드를 포함 할 수 있으며, 각 레코드는 다른 'value'를가집니다. 나는 'IN'리스트의 어떤 값이 table2의'value'에 대한 값과 일치하는지 알 필요가 있습니다. – Josh

+0

이것은이 조인을 사용하는 다른 제안이었습니다. 아마 내가 잘못 이해했을 수도 있습니다. 나에게 실제로 그것을 잠시 동안 시험하게 해주세요. – Josh

+0

사과드립니다. 작동했습니다. 나는 JOIN의 논리를 이해하지 못했습니다. – Josh

관련 문제