我正在嘗試將兩個表與查詢連接起來,以便遍歷結果集以填充缺失的資料(在我的示例“結果表”中標記為“NULL”)。資料庫是內部的,只能由我訪問,所以開銷不是太大的問題。我的表的結構是這樣的:
表格1
| table1_id (PK, A_I) | 記錄名稱 |
|---|---|
| 1 | 姓名1 |
| 2 | 姓名2 |
| 3 | 姓名 3 |
table2(important_id 和 table1_id 一起索引)
| table2_id (PK, A_I) | 重要 ID | 表1_id | 資料 |
|---|---|---|---|
| 1 | 1000 | 1 | 重要資料-a |
| 2 | 1001 | 1 | 重要資料-b |
| 3 | 1001 | 3 | 重要資料-c |
| 4 | 1002 | 3 | 重要資料-d |
我將如何實作這樣的結果:
結果表(“NULL”是我最終需要通過使用WHERE子句過濾掉它們來填寫的內容)
| table2_id (PK, A_I) | 重要 ID | 表1_id | 記錄名稱 | 資料 |
|---|---|---|---|---|
| 1 | 1000 | 1 | 姓名1 | 重要資料-a |
| 空值 | 1000 | 2 | 姓名2 | 空值 |
| 空值 | 1000 | 3 | 姓名 3 | 空值 |
| 2 | 1001 | 1 | 姓名1 | 重要資料-b |
| 空值 | 1001 | 2 | 姓名2 | 空值 |
| 3 | 1001 | 3 | 姓名 3 | 重要資料-c |
| 空值 | 1002 | 1 | 姓名1 | 空值 |
| 空值 | 1002 | 2 | 姓名2 | 空值 |
| 4 | 1002 | 3 | 姓名 3 | 重要資料-d |
我已經使用標準INNER/LEFT/RIGHT JOINs 甚至 a達到了我在 MySQL 中的專業知識限制CROSS JOIN,但是我嘗試過的任何事情都沒有給我需要“填寫”的缺失行。我有一個暗示,我可能需要一個子查詢,JOIN但我的猜測并沒有讓我接近我正在尋找的東西。也許我只需要創建丟失的行(沒有“重要資料”)而不是試圖通過查詢來找出它?
uj5u.com熱心網友回復:
首先為 table1 交叉連接生成重要 id 以獲得所有 important_id/id 組合,然后左連接到 table2
DROP TABLE IF EXISTS T1;
DROP TABLE IF EXISTS T;
CREATE TABLE T(id INT, record_name VARCHAR(20));
INSERT INTO T VALUES
(1 ,'name1'),
(2 ,'name2'),
(3 ,'name3');
CREATE TABLE T1 (id INT, iid INT, TID INT,VAL VARCHAR(20));
INSERT INTO T1 VALUES
(1 ,1000 ,1 ,'importantdata-a'),
(2 ,1001 ,1 ,'importantdata-b'),
(3 ,1001 ,3 ,'importantdata-c'),
(4 ,1002 ,3 ,'importantdata-d');
SELECT T1.ID,T.IID IMPORTANT_ID,T.ID TABLE1_ID,T.RECORD_NAME,T1.VAL DATA FROM
(
SELECT T.ID - 1 1000 IID ,T1.ID ID ,T1.RECORD_NAME FROM T CROSS JOIN T T1
)T
LEFT JOIN T1 ON T1.IID = T.IID AND T1.TID =T.ID
ORDER BY T.IID,T.ID;
見https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=f90596adc3e6cc8c294d4ba24fd2cc96
或者如果 table2 包含重要 id 的所有必需值
SELECT T1.ID,T.IID IMPORTANT_ID,T.ID TABLE1_ID,T.RECORD_NAME,T1.VAL DATA FROM
(
select t.id,t.record_name,iid from t cross join (select distinct iid from t1 ) t1
) T
LEFT JOIN T1 ON T1.IID = T.IID AND T1.TID =T.ID
ORDER BY T.IID,T.ID;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401822.html
標籤:mysql
上一篇:MySQLNOTIN(array[])vsPHPin_array(array[])?
下一篇:MySQL中的注冊和登錄程式
