Reputation: 5658
I have two tables, one with names, nametable
:
id | name
---------
1 | alice
2 | bob
3 | charlie
A second with related data, datatable
:
id | data
------------
1 | chicken
2 | fish
2 | chicken
3 | spaghetti
Now I want to find matching matching data between two names of nametable
:
name1 | name2 | data
--------------------
alice | bob | chicken
Now I have this:
SELECT nt0.name, nt1.name, nt0.data
FROM nametable AS nt0
INNER JOIN datatable AS dt0
ON nt0.id = dt0.id
LEFT JOIN nametable AS nt1
INNER JOIN datatable AS dt1
ON nt1.id = dt1.id
WHERE dt0.data = dt1.data AND nt0.name < nt1.name;
But it doesn't work. I guess the JOIN
s are the reason, but I don't know how else to do it.
Upvotes: 0
Views: 30
Reputation: 31879
You can do a self join on derived tables:
SELECT
t1.name, t2.name, t1.data
FROM (
SELECT n.id, n.name, d.data
FROM nametable n
INNER JOIN datatable d
ON d.id = n.id
) t1
INNER JOIN (
SELECT n.id, n.name, d.data
FROM nametable n
INNER JOIN datatable d
ON d.id = n.id
)t2
ON t2.data = t1.data
AND t2.id > t1.id
Upvotes: 1