2012-09-21 59 views
0

我有兩個表需要從表'A'和'表B'中提取數據。 「表A」和「表B」之間有1:M的關係,A.IDNumber作爲「表B」中的外鍵。從關係中的兩個表中提取數據,但是一個表中的數據只出現一次

我想要做的是從表A中提取一次值,並從表B中提取相應的值而不重複'表A'數據。

我的查詢看起來像做什麼?爲了幫助,假設我想要'表A'中的以下值:A.IDNumber,A.Amount和「TableB」值B.IDNumber,B.Address,B.State,B.City,B.State, B.Zip。

感謝您的任何幫助!

+1

您正在使用什麼RDBMS? SQL服務器,MySQL,甲骨文?你能發佈一些樣本數據和期望的結果嗎? – Taryn

回答

0

所以你不要重複值,可以使用DISTINCT您的查詢

select **DISTINCT** A.IDNumber, A.Amount, and from 'TableB' values B.IDNumber, B.Address, B.State, B.City, B.State, B.Zip from TableA A, TableB B where A.IDNumber = B.IDNumber 
+0

使用不同的唯一問題是,可能有其他記錄與idNumber相關聯,我希望在結果中使用。儘管謝謝你的建議! –

0

你所說的是你想只在結果從B.

第一行從表A中的字段你這樣做取決於數據庫。這是一種可以與大多數數據庫一起使用的方法:

with b as (
    select b.*, 
      row_number() over (partition by b.a_idnumber order by b.idnumber) as seqnum 
    from tableb 
    ) 
select (case when b.seqnum = 1 then a.idnumber end) as IdNumber, 
     (case when b.seqnum = 1 then a.amount end) as Amount, 
     b.* 
from tablea a join 
    b 
    on a.idnumber = b.a_idnumber 
order by a.idnumber, b.seqnum 
+0

謝謝。我實現了這一點,它完全按照我的意願工作。 –

1

您可以使用下面的查詢。這裏的工作一SQL Fiddle

SELECT CASE WHEN RN=1 THEN IDNumber END IDNumber, 
     CASE WHEN RN=1 THEN Amount END Amount, 
     Address, City, State, Zip 
FROM 
(
    SELECT A.IDNumber, A.Amount, 
     B.Address, B.City, B.STATE, B.Zip, 
     RN = Row_number() over (partition BY A.IDNumber 
           ORDER BY B.IDNumber) 
    FROM tableA A 
    LEFT JOIN tableB B ON A.IDNumber = B.IDNumber 
) X 
ORDER BY IDNumber, RN 

它給出了這樣的輸出

 
IDNumber Amount ADDRESS CITY STATE ZIP 
1  200.1 1 Public Road Gotham AX 19281 
(null) (null) Secret Batcave Gotham AX 19281 
(null) (null) Overseas Hideaway Unspecified ?? n/a 
2  312.45 John Woo Lane Trespass TX 12345 
(null) (null) Address City State Sq-123 

當給定此示例表

CREATE TABLE TableA(
    IDNumber int, Amount money) 
CREATE TABLE TableB(
    IDNumber int, 
    Address varchar(max), 
    City varchar(max), 
    State varchar(max), 
    Zip varchar(max)) 
INSERT TableA SELECT 
    1,200.10 union all select 
    2,312.45 
INSERT TableB SELECT 
    1, '1 Public Road', 'Gotham', 'AX', '19281' union all select 
    1, 'Secret Batcave', 'Gotham', 'AX', '19281' union all select 
    1, 'Overseas Hideaway', 'Unspecified', '??', 'n/a' union all select 
    2, 'John Woo Lane', 'Trespass', 'TX', '12345' union all select 
    2, 'Address', 'City', 'State', 'Sq-123' 
+0

謝謝!這完全解決了! –

相關問題