source

각 행에서 두 개의 열을 선택하여 값 집합을 매핑하는 중

ittop 2023. 8. 30. 22:05
반응형

각 행에서 두 개의 열을 선택하여 값 집합을 매핑하는 중

일대일 관계

저는 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"

원래 쿼리:

tables

아래 쿼리는 한 행에서만 작동합니다.그런데 다음 줄은 어떻게 확인할 수 있습니까?

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

Error

당신이 제가 하려는 일을 더 잘 이해할 수 있도록 이것을 추가합니다.

허락하다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

반응형