上一個問題:SQL query of relationship between two items from the same table。來自同一表的相關項目的SQL查詢
我想能夠將來自同一個表的項目與聯接表相關聯。類似於上面的問題,但我想知道是否有可能查詢表中的所有項目相互鏈接。
entries
id
name
similars (join table connecting two entries)
one_id
two_id
car - train
\
bicycle - shopping cart
是否可以查詢鏈接到 「自行車」 的所有項目,並得到類似的結果:
Entry | Similar_to
---------------------
Bicycle | Shopping cart
Bicycle | Car
Bicycle | Train
更新:
好像我需要遞歸來做到這一點,所以我從MySQL移到postgresql。 目前想知道如何使用連接表實現遞歸兩種方式。這裏有一個表的設置和查詢作品鏈表要去一個辦法:
CREATE TABLE entries
(
id serial primary key,
name varchar(20)
);
INSERT INTO entries
(name)
VALUES
('Car'),
('Train'),
('Bicycle'),
('Shopping cart'),
('Node'),
('Skis'),
('Skates');
CREATE TABLE similars
(
one_id int,
two_id int
);
INSERT INTO similars
(one_id, two_id)
VALUES
(1, 2),
(1, 3),
(3, 4),
(6, 7);
查詢,現在有額外的PostgreSQL
WITH RECURSIVE temp AS
(
SELECT * FROM entries WHERE name = 'Bicycle'
UNION ALL
SELECT e.*
FROM entries AS e
LEFT JOIN similars AS s
ON e.id = s.two_id
JOIN temp l
ON s.one_id = l.id
)
SELECT * FROM temp;
有了,我得到的結果,將工作的偉大,儘管仍然需要弄清楚如何獲得其餘的人。
ID NAME
3 Bicycle
4 Shopping cart
New SQLfiddle。如果有人知道如何獲得結果,那麼鏈接列表上的兩個方向都會很好。
我可能不夠聰明,但我無法弄清楚你在問什麼。你能提供一些樣本輸出嗎? –
增加了一些輸出,我會尋找 – WhoDidThis
好吧,我現在得到它..你想要自行車在所有情況下首先列出。無論它是否位於類似表格的位置1或2。 – xQbert