我有一個主要 id 之間的關系表,我試圖用它來獲取其附帶屬性的串列。下面的最小示例將拋出Error: sub-select returns 3 columns - expected 1. 我在這里閱讀了一些人們在進行換位時使用的解決方案,但他們似乎依賴于僅在具有一小組選擇的一列中查找資料,或者使用類似的替代用例。鑒于維度和屬性之間缺乏分組,我認為這不適合我的實際資料集,但可能有一個我沒有看到的簡單替代查詢。或者也許是構建資料以適應此類查詢的更好方法。
CREATE TABLE Keys(primary_id, id1, id2);
CREATE TABLE Attr(id, attr1, attr2);
INSERT INTO Keys VALUES(1, 2, 3);
INSERT INTO Keys VALUES(2, 4, 5);
INSERT INTO Keys VALUES(3, 6, 7);
INSERT INTO Attr VALUES(1, "a", "b");
INSERT INTO Attr VALUES(2, "c", "d");
INSERT INTO Attr VALUES(3, "e", "f");
INSERT INTO Attr VALUES(4, "g", "h");
INSERT INTO Attr VALUES(5, "i", "j");
INSERT INTO Attr VALUES(6, "k", "l");
INSERT INTO Attr VALUES(7, "m", "n");
SELECT *
FROM Attr
WHERE Attr.id IN (SELECT * from Keys where Keys.primary_id=2)
期望的輸出:
| 2 | "c" | "d" |
| 4 | "g" | "h" |
| 5 | "i" | "j" |
如果以某種我可以決議的方式對所有非主鍵進行分組是有意義的,我就可以更改 Keys 表。我放棄了鑰匙并嘗試了類似的東西:
CREATE TABLE Keys(primary_id, ids);
INSERT INTO Keys VALUES(1, json_array('[2, 3]'));
INSERT INTO keys VALUES(2, json_array('[4, 5]'));
INSERT INTO Keys VALUES(3, json_array('[6, 7]'));
此查詢
SELECT json_extract(ids, '$[#-1]') FROM Keys WHERE Keys.primary_id=2;
回傳[4,5]
但是,
SELECT *
FROM Attr
WHERE Attr.id IN (SELECT json_extract(ids, '$[#-1]') FROM Keys WHERE Keys.primary_id=2)
回傳空值。如果無論如何都不能從陣列中進行選擇,那甚至可能都不是一種有效的方法。感謝您的集體智慧!
編輯:完整性的解決方案:
SELECT *
FROM Attr
WHERE Attr.id IN (SELECT primary_id FROM Keys WHERE Keys.primary_id=2
UNION
SELECT id1 FROM Keys WHERE Keys.primary_id=2
UNION
SELECT id2 FROM Keys WHERE Keys.primary_id=2);
uj5u.com熱心網友回復:
在您的子查詢中,您需要單獨選擇每個 id 列并將結果合并在一起,即您的子查詢將有 3 個合并的選擇陳述句
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403158.html
標籤:
下一篇:SQL按每小時不同日期排序
