MySQL이 너무 오랫동안 FULL JOIN을 지원하지 않는다는 사실에 상당히 실망했습니다. (어째서?) 그리고 해결 방법으로 UNION을 사용해야합니다. 내가 다음 쿼리에 문제가 있다고 말했습니다. 기본적으로 내가 소유자에 할당 된 사양 컴퓨터의 목록을모호한 열 이름이있는 MySQL의 전체 조인 (공용)
컴퓨터
id userid owner cpu
1 1 Jack 3.4
2 1 Jack 3.4
3 2 Sara 3.0
모니터
id userid owner inch
1 1 Jack 22
2 1 Jack 22
3 3 Mark 17
4 4 Luke 32
: 나는 예를 들어 두 개의 테이블이있다. 마찬가지로 나는 사양이있는 모니터 목록과 각 모니터가 소유자에게 할당되어 있습니다. 나는 성공적으로 쿼리 위의 결과를 얻을 수 있습니다
id userid owner cpu id userid owner inch
1 1 Jack 3.4 1 1 Jack 22
2 1 Jack 3.4 2 1 Jack 22
3 2 Sara 3.0 null null null null
null null null null 3 3 Mark 17
null null null null 4 4 Luke 32
:
SELECT * FROM computers AS a
LEFT OUTER JOIN monitors AS o on a.owner = o.owner
UNION
SELECT * FROM computers AS a
RIGHT OUTER JOIN monitors AS o on a.owner = o.owner
문제는 다음과 같습니다 나는이 결과에 소유자가이 두 테이블을 결합하려는
I- 은 내 쿼리에서 유쾌한 성격을 사용하고 싶지 않습니다. 왜냐하면 효율적이지는 않지만 일부 특정 열만 필요하기 때문입니다.
- 두 테이블 모두 모호한 열 이름 (id, userid, owner)이 있으므로 예를 들어 소유자가 ORDER BY 할 수없는 것으로 보입니다. 난 내가 별칭을 사용한다는 것을 알고 있지만 나는 WHERE 문 사용해야 할
- 을 구현하는 방법을 이해하지 않지만 다시 지금에 있기 때문에 모호한 열 이름
의 그것을 구현하는 방법을 이해하지 않습니다 내가하고자 의사 쿼리에서 말한 요약 :
01 23,516,SELECT ID = 컴퓨터 WHERE CPU에서 a_owner 하지만 CPU AS A_ID, a_userid AS 사용자 ID, 소유자 AS 3.4
UNION과 소유자가 가입 : b_id, b_userid AS 사용자 ID, b_owner AS 소유자로
SELECT ID는, 모니터로부터 AS b_inch 인치 WHERE 인치 =
22 시간 내 주셔서 감사합니다.
나는 이것이 가상의 예이고 얼마가 아닌지 궁금해. 모든 레코드에서 사용자 아이디와 이름이 반복되는 데이터베이스 디자인이 좋지 않습니다. 그런 다음 사용자가 소유 한 모든 컴퓨터와 모니터를 결합합니다. 무엇 때문에? 모든 흥미있는 가능한 조합을 보려면? 주어진 쿼리를 사용하면 두 개의 잭 레코드가 아니라 네 개의 레코드를 얻을 수 있습니다. 모호한 열 이름은 한정자가 필요합니다. 이미 a.owner = o.owner에서 이것을 사용합니다. 그렇다면 문제는 어디에 있습니까? –
내가 이미 말했듯이 내 것은 단지 예일뿐입니다. 내가 이런 말을 할 때,이 같은 구조를 가졌음을 말해줘. 디자인이 잘못되었다고 생각한다면 http://www.whmcs.com/을 비난해야합니다. 어쨌든 나를 믿어. 디자인은 절대적으로 훌륭하고 기능적입니다. 여기서 요점은 디자인이 얼마나 좋지/좋은지에 대해 토론하는 것이 아니라 FULL JOIN을 만드는 방법입니다. – user1274113
오케이. 때로는 그러한 측면 발언이 도움이 될 수 있습니다. 나는 공격 할 뜻이 아니 었습니다 :-) 나는 대답을 올렸습니다. 희망이 당신의 모든 질문에 대답. –