2016-09-26 61 views
0

我遇到了一個複雜的問題,一個數據庫中的數據有三個表。

First_DB插入一個數據庫的不同表數據到其他數據庫的單表

-- default_users 
id username email  password 
1 Timbog [email protected] vads7y3kkjdfa 
2 Marta [email protected] vads7y3kkjdfa 

-- default_album 
album_id album_name default_user_id 
    1  Name_Tim  1 
    3  Katarina  2 
-- default_album_img 
img_id  image_file album_id 
    3  1320229733.jpg  1 
    4  3320229733.jpg  3 

Second_DB

--users 
user_id user_name  user_email  user_pass  user_image 
    1  Timbog [email protected] vads7y3kkjdfa 1320229733.jpg 
    2  Marta  [email protected] vads7y3kkjdfa 3320229733.jpg 

我用來解決這個問題是,首先獲取所有的數據通過內連接的方法中,應該使用完全外部連接,並插入必填字段我的表,下面的查詢是我試圖讓它wor:

INSERT INTO bbpin.users (user_name, user_pin, user_email, user_password, user_img) 
SELECT default_users.username, default_users.bb_pin, default_users.email, default_users.password 
FROM bbmpins_pins.default_users 
INNER JOIN bbmpins_pins.default_album_images 
ON default_album_images.album_id = default_users.id; 

我想念的事情我該如何比較兩個表的ID在這個加入也許?或者這個查詢全是錯誤的方法? 由First_DB中的seeparte中的兩個表可能有多個記錄我們如何將它們設置爲最後一個條目? 感謝

回答

1

它看起來像您正試圖從default_users表中檢索所有行。並且每行還會從default_album表中返回相應的行。與此同時,表中的相應行(default_album_img)。

給出的示例數據,使用內部連接的查詢將返回指定的結果:

SELECT u.id    AS user_id 
     , u.username  AS user_name 
     , u.email   AS user_email 
     , u.password  AS user_pass 
     , i.image_file  AS user_image 
    FROM default_users u 
    JOIN default_album a 
    ON a.default_user_id = u.id 
    JOIN default_album_img i 
    ON i.album_id = a.album_id 

該查詢將爲示例數據工作。

但是,如果在default_user行不具有匹配的行default_album,然後內部聯接將不會返回該行:

-- default_users 
id username email   password 
3 branstark [email protected] warg2 

或者,如果有兩個或兩個以上在default_album行給定用戶匹配,那麼查詢將返回從default_user行的兩個副本...

-- default_album 
album_id album_name default_user_id 
    1  Tim2   1 

沒有什麼是在這些情況下要返回一個規範,我們不能推薦查詢。

+0

或者我們可以一個接一個地做,patty方法將所有數據從一張表插入到另一張表,而沒有衝突表,並且當它完成匹配fk和相冊鍵並插入它時,仍然需要處理那些多個值 –

+0

如果我刪除用戶表的主鍵作爲唯一鍵,會有什麼幫助?我們可以這樣做嗎? –

+0

查詢確實取決於您試圖實現的內容。如果內部連接查詢產生一個「缺少」行或具有「重複」行的集合,那麼可以解決這個問題。我們可以使用OUTER連接來避免「丟失」行,或者我們可以通過在SELECT列表中使用相關子查詢來避免連接。爲了避免「重複」行,我們可以在SELECT列表中使用GROUP BY和聚合表達式,或者(再次)使用相關子查詢。這真的取決於你想要返回的結果。 – spencer7593

1

我使用JOIN看不出什麼毛病你目前的做法,但可以修改它有點更具可讀性,你也必須將關係表

INSERT INTO bbpin.users (user_id, user_name, user_pin, user_email, user_password, user_img) 
SELECT du.id, 
du.username, 
du.bb_pin, 
du.email, 
du.password, 
dai.image_file 
FROM bbmpins_pins.default_users du 
JOIN bbmpins_pins.default_album da ON du.id = da.default_user_id 
INNER JOIN bbmpins_pins.default_album_images dai 
ON dai.album_id = da.album_id; 
+0

因爲我們必須從第三個表中獲取圖像值,所以它會給出直接計數錯誤 –

+0

@HabibRehman,如果有幫助,請參閱編輯答案。 – Rahul

+0

同樣的錯誤,列計數與值計數不匹配。我猜可能會有多個用戶插入相冊,這可能是問題所在? –

相關問題