I have a query
x
SELECT
d.GUID, w.word
FROM
dictionary d
JOIN
word w ON w.ID = d.ID_word
WHERE
w.id_language = #ID#;
if #ID# = 1
it returns table
GUID | word
-----------
1 | A
2 | B
3 | C1
3 | C2
4 | D1
4 | D2
5 | E
if #ID# = 2
it returns table
GUID | word
-----------
1 | AA
2 | BB1
2 | BB2
3 | CC
4 | DD1
4 | DD2
6 | FF
Now I want merge these two tables/queries to get a table which looks like that:
GUID | word1 | word2
--------------------
1 | A | AA
2 | B | BB1
2 | B | BB2
3 | C1 | CC
3 | C1 | CC
4 | D1 | DD1
4 | D1 | DD2
4 | D2 | DD1
4 | D2 | DD2
So basically it is a table of the Cartesian product of the rows with the same GUID
Advertisement
Answer
You don’t need subqueries:
SELECT d1.GUID, w1.word, w2.word
FROM dictionary d1 JOIN
word w1
ON w1.ID = d1.ID_word JOIN
dictionary d2
ON d2.GUID = d.GUID JOIN
word w2
ON w2.id = d2.ID_word
WHERE w1.id_language = ? AND
w2.id_language = ?;
I think this is more readable using CTEs:
WITH dw AS (
SELECT d.GUID, w.word, w.id_language
FROM dictionary d JOIN
word w
ON w.ID = d.ID_word
)
SELECT dw1.GUID, dw1.word, dw2.word
FROM dw dw1 JOIN
dw dw2
ON dw1.GUID = dw2.GUID
WHERE dw1.id_language = ? AND
dw2.id_language = ?;
In both these examples (and what is implied by your question) GUIDs with only one word are filtered out. These can be included by tweaking the queries.