2017-03-06 1 views
0

테이블 이름은 아래와 같이 메뉴 목록입니다.고유 레코드를 가져 오기위한 My SQL 쿼리

Health_interest_id menu_id 
    ------------------- ------- 
    4      4 
    4      10 
    5      10 
    2      4 
    2      10 
    2      15 
    2      16 
    1      4 

지금 나는 우리가 health_id = 4, menu_id = 4를 볼 수 있습니다 1 행에 예를 들어

.. 간격의 저장 같은 전에 없어 경우에만 발생할합니다. 그래서 행

2 행의 다음

, 우리는 3 행에서 같은

같은, menu_id = 10을 이미 위의 행에 존재하는, = 4 health_id 참조, 그래서 행을 건너 뛸 수 있습니다 가져 오기위한 shuld하는 위의 recore에서 사용할 수 있었으므로 건너 뛰고 모든 행을 계속합니다. 결과가 전에 얻은 경우에 건너 뜀 것을 의미한다.

+1

MySQL 또는 MS SQL Server를 사용하고 있습니까? 관련되지 않은 제품에 태그를 지정하지 마십시오. – jarlh

+5

SQL 테이블은 * 정렬되지 않은 * 세트를 나타냅니다. 주문을 지정하지 않는 한 "첫 행"또는 "위"와 같은 것은 없습니다. 테이블의 열에 값으로 지정된 순서가 있습니까? –

+0

'3 번째 행과 같고, 위의 recore에서 사용할 수있는 menu_id = 10이므로 건너 뛰고 모든 행을 계속 진행합니다. 결과가 나오면 건너 뜁니다. '라고 말했기 때문에 두 번째 행은 생략해야한다고 했으므로 세 번째 행 (두 번째 행)이 건너 뛰어야한다는 것을 어떻게 알 수 있을까요? 요구 사항을 명확히하십시오. –

답변

0

흠. 두 개의 열에 고유 값만 입력하려는 경우 다음을 수행 할 수 있습니다.

select Health_interest_id as menu_id from menulist 
union 
select menu_id from menulist; 

원하는대로 수행 할 수 있습니까?

0

컨텍스트 인식 선택을 수행하도록 설계되지 않았기 때문에 이러한 종류의 논리를 데이터베이스 엔진 밖으로 옮겨야합니다. 관계형 데이터 개념을 깨고 있습니다. 여기서 말하는 것은 해결책입니다. 아무도 어떤 이유로 든 그렇게 사용해야 할 필요가 없습니다. 나는 해고 당하고 나의 학위를 취소하고 그것을 쓰는 것만으로 stackoverflow에서 금지 할 자격이있다. 그러나 나는 그 재미를보아야한다고 생각합니다. 감히 사용하지 마십시오;).

SELECT Health_interest_id, menu_id from 
(
    SELECT 
     t2.*, 
     @s:=CASE WHEN @t <> "" AND @u <> "" THEN CONCAT(@s,@t,@u) ELSE @s END, 
     @t:=CASE WHEN LOCATE(CONCAT("|", Health_interest_id, "|"),@s) = 0 THEN CONCAT(Health_interest_id, "|") else "" END as AisNew, 
     @u:=CASE WHEN LOCATE(CONCAT("|", menu_id, "|"),@s) = 0 THEN CONCAT(menu_id, "|") else "" END as BisNew 
    FROM 
     Temp.t2 as t2, 
     (Select @s:="|") as s, 
     (Select @t:="") as t, 
     (Select @u:="") as u 
) AS INNER_TAB 
WHERE AisNew <> "" And BisNew <> ""; 
+0

테이블 이름은 어디에 있습니까? –

+0

Ive는 테이블 이름이 없기 때문에 Temp.t2 테이블을 호출했습니다. – gbtimmon

관련 문제