Sql 从关系中的两个表中提取数据,但一个表中的数据只显示一次

Sql 从关系中的两个表中提取数据,但一个表中的数据只显示一次,sql,Sql,我需要从“表A”和“表B”中提取数据。“表a”和“表B”之间有一个1:M的关系,“表B”中的外键是a.IDNumber 我想做的是从表A中提取一次值,并从“表B”中提取相应的值,而不重复“表A”数据 要执行此操作,我的查询是什么样子的?为了提供帮助,假设我需要“表A”中的以下值:A.IDNumber、A.Amount和“表B”中的值B.IDNumber、B.Address、B.State、B.City、B.State、B.Zip 谢谢你的帮助 为了不重复值,请在查询中使用DISTINCT sel

我需要从“表A”和“表B”中提取数据。“表a”和“表B”之间有一个1:M的关系,“表B”中的外键是a.IDNumber

我想做的是从表A中提取一次值,并从“表B”中提取相应的值,而不重复“表A”数据

要执行此操作,我的查询是什么样子的?为了提供帮助,假设我需要“表A”中的以下值:A.IDNumber、A.Amount和“表B”中的值B.IDNumber、B.Address、B.State、B.City、B.State、B.Zip


谢谢你的帮助

为了不重复值,请在查询中使用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

您要说的是,您只希望表A中的字段位于B中结果的第一行

执行此操作的方式取决于数据库。以下是一种适用于大多数数据库的方法:

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

您可以使用下面的查询。这是一张工作票

它给出了这个输出

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
您正在使用什么rdbms?sql server、mysql、oracle?你能发布一些样本数据和期望的结果吗?谢谢。我实现了这个,它完全按照我想要的那样工作。使用distinct的唯一问题是,可能还有其他与我想要的结果中的idNumber相关联的记录。谢谢你的建议! 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'