두 기준의 모든 조합을 반환하면서 여러 기준에 가입하는 방법은 무엇입니까?
저는 SQL을 잘 모르는 사람이기 때문에 이것이 정말 간단한 답이라고 기꺼이 장담합니다.
주어진:
- 표 1에는 1열(1열) 2열(2열) 3열(1열)이 있습니다.
- 표 2에는 1열(1열) 2열(2열) 3열(2열은 표 2.metric2에 고유한 2열)이 있습니다.
표의 각 기준 1에 대한 기준 2의 값은 1 - 5 사이일 수 있습니다.
여기서 조인 문을 사용할 때(표 1을 다음과 같이 식별한다고 가정)One이 이전):
SELECT WeddingTable, TableSeat, TableSeatID, Name, Two.Meal
FROM table1 as One
INNER JOIN table2 as Two
ON One.WeddingTable = Two.WeddingTable AND One.TableSeat = Two.TableSeat
저는 3개 또는 4개의 기준이 있는 것을 알고도 기준 1/기준 2 조합 중 하나만 받습니다.모든 조합을 가져오려면 어떻게 해야 합니까?
결혼식이 있는 경우를 예로 들어, 테이블 1은 기본적으로 좌석 차트이고, 테이블 2는 각 테이블/좌석이 선택한 식사 옵션입니다.표 1은 편리함을 제공합니다.TableSeatID그러나 표 2는 비교할 수 없습니다.ID.
표본 데이터:

결과는 4개 라인을 모두 표시해야 하며, 3개 시트는 모두 다음 위치에 있어야 합니다.WeddingTable001 및 1석WeddingTable 002.
원하는 결과:

SELECT one.*, two.Meal
FROM table1 AS one
LEFT JOIN table2 AS two
ON (one.WeddingTable = two.WeddingTable AND one.TableSeat = two.TableSeat);
SELECT aa.*,
bb.meal
FROM table1 aa
INNER JOIN table2 bb
ON aa.tableseat = bb.tableseat AND
aa.weddingtable = bb.weddingtable
INNER JOIN
(
SELECT a.tableSeat
FROM table1 a
INNER JOIN table2 b
ON a.tableseat = b.tableseat AND
a.weddingtable = b.weddingtable
WHERE b.meal IN ('chicken', 'steak')
GROUP by a.tableSeat
HAVING COUNT(DISTINCT b.Meal) = 2
) c ON aa.tableseat = c.tableSeat
create table a1
(weddingTable INT(3),
tableSeat INT(3),
tableSeatID INT(6),
Name varchar(10));
insert into a1
(weddingTable, tableSeat, tableSeatID, Name)
values (001,001,001001,'Bob'),
(001,002,001002,'Joe'),
(001,003,001003,'Dan'),
(002,001,002001,'Mark');
create table a2
(weddingTable int(3),
tableSeat int(3),
Meal varchar(10));
insert into a2
(weddingTable, tableSeat, Meal)
values
(001,001,'Chicken'),
(001,002,'Steak'),
(001,003,'Salmon'),
(002,001,'Steak');
select x.*, y.Meal
from a1 as x
JOIN a2 as y ON (x.weddingTable = y.weddingTable) AND (x.tableSeat = y. tableSeat);
모든 메트릭을 나열하려는 것처럼 들립니다.
SELECT Criteria1, Criteria2, Metric1 As Metric
FROM Table1
UNION ALL
SELECT Criteria1, Criteria2, Metric2 As Metric
FROM Table2
ORDER BY 1, 2
Criteria1+Criteria2 조합을 하나만 사용하려는 경우 그룹화합니다.
SELECT Criteria1, Criteia2, SUM(Metric) AS Metric
FROM (
SELECT Criteria1, Criteria2, Metric1 As Metric
FROM Table1
UNION ALL
SELECT Criteria1, Criteria2, Metric2 As Metric
FROM Table2
)
ORDER BY Criteria1, Criteria2
먼저 열 이름을 참조하여 보다 명확하게 설명하는 것이 좋습니다.WeddingTable과 TableSit는 두 테이블 모두에 열 이름으로 표시되므로 환경에 따라 모호성이 있을 수 있습니다.
Select One.WeddingTable, One.TableSeat, TableSeatID, Name, Two.Meal
FROM table1 as One
inner join table2 as Two
on One.WeddingTable = Two.WeddingTable and One.TableSeat = Two.TableSeat
환경에서 이 모호성을 해결하면 INER JOIN은 테이블에 나열된 데이터에 대한 4개의 레코드를 반환합니다.두 테이블 사이에 일치하는 4개의 레코드가 있습니다.
제공된 샘플에서, 저는 당신이 왜 하나의 조합만을 얻는지 이해할 수 없습니다.제가 생각할 수 있는 유일한 가능성은 실제 데이터 테이블의 WeddingTable과 TableSit 열에 있는 값이 실제로 일치하지 않는 경우입니다.
예를 들어 TableSit가 CHAR 유형이고 Table1이라고 가정합니다.TableSit에는 '001', '002', '003', '001') 및 표 2가 포함되어 있습니다.TableSit에는 '01', '002', '3', '01'이 포함되어 있습니다. 그러면 ON 술어의 TableSit 구성 요소로 인해 일치 항목이 한 개로 제한됩니다.
다른 고려 사항은 한 테이블에 다른 테이블과 일치하지 않는 데이터가 있을 때입니다.
Anom의 응답은 왼쪽 외부 조인을 사용합니다.그러면 테이블 2에 일치하는 레코드가 있는지 여부에 관계없이 테이블 1의 모든 레코드가 반환됩니다.일치하는 항목이 없는 경우 식사 열에 NULL 값이 포함됩니다.모든 레코드가 일치하므로 결과는 INER JOIN과 동일합니다.
그러나 테이블 2에 일치하는 레코드가 없는 테이블 1에 추가
INSERT INTO
table1 (WeddingTable, TableSeat, TableSeatID, Name)
VALUES
(003, 002, 003002, 'Arielle');
LEFT OUTER JOIN 쿼리는 이제 INTER JOIN과 다른 결과를 생성합니다.
언급URL : https://stackoverflow.com/questions/13131496/how-to-do-join-on-multiple-criteria-returning-all-combinations-of-both-criteria
'programing' 카테고리의 다른 글
| 메이븐 다운로드에는 .last가 확장으로 업데이트되었습니다. (0) | 2023.05.09 |
|---|---|
| LINQ를 사용하여 목록이 비어 있는지 확인하는 중 (0) | 2023.05.09 |
| PostgreSQL에서 데이터베이스 스키마를 내보내려면 어떻게 해야 합니까? (0) | 2023.05.09 |
| WPF 응용 프로그램에서 리소스 '기본 창'을 찾을 수 없습니다.xaml' (0) | 2023.05.09 |
| npm - 패키지의 최신 버전을 표시하는 방법 (0) | 2023.05.09 |