programing

지정된 값이 열에 있는 행에서 여러 개의 서로 다른 값을 가져오는 Mysqlike

muds 2023. 10. 13. 22:35
반응형

지정된 값이 열에 있는 행에서 여러 개의 서로 다른 값을 가져오는 Mysqlike

저는 이런 데이터 테이블을 가지고 있습니다.데이터를 보다 자세히 설명합니다.

col0  |  col1 |  col2  |  col3  | col4
======================================
milk  | egg   | juice  |        |
egg   | juice |        |        |
bread | jam   | juice  |        |
wheat | egg   | juice  |        |
jam   | juice |        |        |

먼저 모든 열에서 Juice를 검색하고 Juice가 있는 모든 행을 가져오려고 합니다.그러면 가장 고유하고 완전한 데이터가 있는 행을 가져와야 합니다.이 경우 첫 번째 행입니다. 반복되는 단어가 없는 가장 고유하고 완전한 데이터 집합을 가지고 있기 때문입니다.그래서 이 데이터에서 'juice'를 검색하면 이 결과를 원합니다.

 milk  | egg   | juice  |
 bread | jam   | juice  |
 wheat | egg   | juice  |

저는 노력했습니다.GROUP BY그리고.DISTINCT모든 열 조합에서 원하는 결과를 얻을 수 없었습니다.이 문장을 사용했습니다.

SELECT * FROM `table` 
WHERE `col4` = 'juice' OR`col3` = 'juice' OR `col2` = 'juice' OR `col1` = 'juice' 
group by `col2`,`col1`,`col0`;

저는 별도의 명세서가 아닌 하나의 명세서로 되어 있으면 좋겠습니다.

그 기능을 사용하시면 됩니다.

그룹에서 연결된 non-NULL 값을 가진 문자열을 반환합니다.

항상 높은 열 번호(col4 > col3 등)에 "가장 완전한 데이터"가 있는 경우,

간단히 할 수 있습니다.LIMIT결과로 이어지다1:

SELECT * FROM `table` 
WHERE `col4` = 'juice' OR`col3` = 'juice' OR `col2` = 'juice' OR `col1` = 'juice'
LIMIT 1;

여러 열에 중복되는 값이 없고 빈 열이 다음을 사용하여 표시되는 경우NULL, 그러면 MySQL에 의해 boolean을 int로 암묵적 유형 캐스팅을 활용할 수 있습니다.

SELECT * 
FROM your_table 
WHERE 'juice' IN (col1, col2, col3, col4) 
ORDER BY ( (col1 IS NOT NULL) + 
           (col2 IS NOT NULL) +
           (col3 IS NOT NULL) +
           (col4 IS NOT NULL) ) DESC
LIMIT 1

결과

| col0 | col1 | col2  | col3 | col4 |
| ---- | ---- | ----- | ---- | ---- |
| milk | egg  | juice |      |      |

DB Fiddle 보기

언급URL : https://stackoverflow.com/questions/58239660/mysqli-fetch-multiple-distinct-values-from-rows-where-given-value-is-in-any-colu

반응형