각 행에서 두 개의 열을 선택하여 값 집합을 매핑하는 중
일대일 관계
저는 mysql을 전문으로 하는 사람이 아니기 때문에 간단한 해결책이 있을 것 같습니다.기본적으로:
에서는 각 행에 특정 값이 포함된 경우(한 행에 있는 두 열에 두 개의 사용자 지정 값이 포함된 경우) 개별적으로 확인할 수 있습니다.
GROUP BY가 config__attribute__value 테이블의 고유 인덱스에서 실행된 덕분에 첫 번째 행을 확인하는 방법을 알고 있습니다.그러나 다른 AND를 만들어 다른 행도 다른 값과 일치하는지 확인하려면 어떻게 해야 합니까?
추상 표현 쿼리:
SELECT price
FROM one
LEFT JOIN many
ON one.id = many.fk_one
WHERE (col1 = "some_value" AND col2 = "some_value") AND (col1 = "some_value" AND col2 = "some_value")
GROUP BY one.id
두 행 모두 마하해야 합니다.
(ONE) 테이블 product_config
id, product_type, inStock, inSale, price
1 "flyers A4" 1 1 800.00
(MANY) 테이블 구성__속성__값
id | fk_product_config | fk_product_atribute | fk_product_atribute_value
7 1 "color" "4/0"
8 1 "paper" "120g"
원래 쿼리:
아래 쿼리는 한 행에서만 작동합니다.그런데 다음 줄은 어떻게 확인할 수 있습니까?
SELECT price
FROM product_config p
LEFT JOIN config__atribute__value c
ON p.id = c.fk_product_config
WHERE (c.fk_product_atribute = "paper" AND c.fk_product_atribute_value = "120g")
GROUP BY p.id
각 행에서 모든 값을 확인하고 있기 때문에 일치하는 항목은 일치하지 않습니다.
SELECT price
FROM product_config p
LEFT JOIN config__atribute__value c
ON p.id = c.fk_product_config
WHERE (c.fk_product_atribute = "paper" AND c.fk_product_atribute_value = "120g") AND (c.fk_product_atribute = "color" AND c.fk_product_atribute_value = "4/0")
GROUP BY p.id
이상적으로는 각 행에 대해 ORDER BY를 사용할 수 있으면 문제가 해결됩니다. 물론 오류가 발생합니다.
SELECT price
FROM product_config p
LEFT JOIN config__atribute__value c
ON p.id = c.fk_product_config
WHERE (c.fk_product_atribute = "paper" AND c.fk_product_atribute_value = "120g")
GROUP BY p.id AND (c.fk_product_atribute = "color" AND c.fk_product_atribute_value = "4/0")
GROUP BY p.id
당신이 제가 하려는 일을 더 잘 이해할 수 있도록 이것을 추가합니다.
허락하다INNER JOIN
당신을 위해 그 일을 하세요!
SELECT price FROM product_config p
INNER JOIN config__atribute__value c1 ON p.id = c1.fk_product_config
AND c1.fk_product_atribute = 'paper'
AND c1.fk_product_atribute_value = '120g'
INNER JOIN config__atribute__value c2 ON p.id = c2.fk_product_config
AND c2.fk_product_atribute = 'color'
AND c2.fk_product_atribute_value = '4/0'
내부 조인을 사용하기 때문에 두 특성을 모두 가진 제품 구성만 반환되고 이러한 특성은 원하는 값을 갖습니다.
이것은 왜 EAV가 관계형 데이터를 구성하는 끔찍한 방법인지를 보여줄 수 있습니다.질문이 방대하고 복잡해집니다.
AND 대신 OR을 사용해 본 적이 있습니까?
WHERE
(c.fk_product_atribute = "paper" and c.fk_product_atribute_value = "120g")
OR
(c.fk_product_atribute = "color" and c.fk_product_atribute_value = "4/0")
언급URL : https://stackoverflow.com/questions/46508586/checking-two-columns-in-each-row-to-mach-a-set-of-values
'source' 카테고리의 다른 글
express.js - 단일 행의 여러 경로에 대한 단일 라우팅 핸들러 (0) | 2023.08.30 |
---|---|
표준 시간대에 대한 UTC 날짜/시간 문자열 (0) | 2023.08.30 |
리와 울에서 검은색 점 제거 (0) | 2023.08.30 |
처리기 취소.postdelayed 프로세스 (0) | 2023.08.30 |
MariaDB를 C++ Application에 연결하기 위한 dll 및 lib 파일을 어떻게 처리할 수 있습니까? (0) | 2023.08.30 |