2017-01-27 45 views
1

我想插入到具有4列的表中。前兩列將使用select into語句填充,而las兩列將從兩個不同的表中填充。我想要做的是,它將全部按行排列,沒有重複和空值。SQL-通過將不同的select into查詢插入到多個列中

爲了形象化我的計劃,這裏是所需的輸出:

enter image description here

,但每當我試圖這樣做,這是我所得到的:

enter image description here

空值每個插入。我目前使用的程序,這裏是我的查詢:

CREATE DEFINER=`root`@`localhost` PROCEDURE `Biller`(IN Pid varchar(30)) 
BEGIN 
    insert into sample2(ids,prices) 
    select bed_bill_id,price 
    from bed_billing 
    where patient_id = Pid 
    UNION 
    select csr_bill_id,price 
    from csr_billing 
    where patient_id = Pid 
    UNION 
    select lab_bill_id,price 
    from lab_billing 
    where patient_id = Pid 
    UNION 
    select pharm_bill_id,price 
    from pharm_billing 
    where patient_id = Pid 
    UNION 
    select rad_bill_id,price 
    from rad_billing 
    where patient_id = Pid; 

    insert into sample2(patient) 
    values(Pid); 

    insert into sample2(physician) 
    select attending_id 
    from attending_physician 
    where attending_physician.patient_id = Pid; 

END 

回答

1

右鍵,你誤解的東西約INSERT。每次您INSERT,您創建一個新的行。它不會將數據添加到最近在以前的INSERT語句中創建的行中的更多列。

因此,您需要讓患者和醫生進入您插入的行。 Pid很容易,你已經有了這個變量,你可以把它作爲第三欄放在你的SELECT中。對於醫生,您應該使用JOIN將attending_physician表中的列追加到五個賬單數據查詢的並集列中。

CREATE DEFINER=`root`@`localhost` PROCEDURE `Biller`(IN Pid varchar(30)) 
BEGIN 
    insert into sample2(ids, prices, patient, physician) 
    select b.bill_id, b.price, Pid, ph.attending_id 
    from (
     select bed_bill_id as bill_id,price 
     from bed_billing 
     where patient_id = Pid 
     UNION 
     select csr_bill_id,price 
     from csr_billing 
     where patient_id = Pid 
     UNION 
     select lab_bill_id,price 
     from lab_billing 
     where patient_id = Pid 
     UNION 
     select pharm_bill_id,price 
     from pharm_billing 
     where patient_id = Pid 
     UNION 
     select rad_bill_id,price 
     from rad_billing 
     where patient_id = Pid 
    ) as b 
    cross join attending_physician as ph 
    where ph.patient_id = Pid; 

END 
+0

這就是我正在考慮插入太多。但是當我嘗試你的查詢時,它說''字段列表' – JJCADIZ

+0

'中的未知列'b.bill_id'我已經解決了它。使用您的查詢。問題是'b.bill_id',但另一列的名字不同,所以我只是把'AS bill_id'放在select查詢中。非常感謝。 – JJCADIZ

+0

是的,謝謝,我忘了這麼做。我剛剛編輯了上述內容以包含該別名。 FWIW您只需要在第一個聯合查詢中爲別名添加別名。後續的聯合查詢將根據第一個查詢採用列名。 –