2017-01-27 10 views
1

4つの列を持つ表に挿入したいと考えました。最初の2つの列はselect into文を使用して移入され、一方、2つの列は2つの異なる表から移入されます。私がしたいことは、すべてが重複とヌルなしで行ごとに配置されるということです。私の計画を視覚化するSQL - 異なるselect intoクエリを使用して複数の列に挿入

は、ここで所望の出力です:

enter image description here

が、私はそれをやってみたときに、これは私が得るものです:

enter image description here

にnull値すべてのインサート。私は現在の手順を使用し、ここで私のクエリでいます:

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の第3列に入れることができます。医師にとっては、JOINを使用して、attending_physicianテーブルの列を5つの請求データクエリの組合の列に追加する必要があります。

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

これは私が挿入物についても考えていることです。私はあなたの質問をしようとすると、 'フィールドリスト'の '未知の列' b.bill_id 'は、 – JJCADIZ

+0

私はすでにそれを解決したと言います。あなたの質問を使って。問題は 'b.bill_id'でしたが、他の列の名前が異なるので、私は単に' AS bill_id'をselectクエリに入れました。どうもありがとう。 – JJCADIZ

+0

はい、ありがとう、私はそれをするのを忘れました。私はちょうどそのエイリアスを含めるために上記を編集しました。 FWIWでは、最初の結合されたクエリで列のエイリアスを行うだけです。後続の結合されていないクエリは、最初のクエリに従って列名を採用します。 –

関連する問題