多表上的SQL连接

多表上的SQL连接,sql,sql-server,database,Sql,Sql Server,Database,我有3个SQL表:调制解调器、调制解调器映像和调制解调器PCKG +----+-------+----------+ | MID| Name | Desc | +----+-------+----------+ | 1 |RNO-505|Wifi Modem| +-----------------------+ +--- -+----+---------+ | MIID| MID| ICON | +-- --+-

我有3个SQL表:调制解调器、调制解调器映像和调制解调器PCKG

    +----+-------+----------+
    | MID| Name  | Desc     |
    +----+-------+----------+
    | 1  |RNO-505|Wifi Modem|
    +-----------------------+

    +--- -+----+---------+
    | MIID| MID| ICON    |
    +-- --+----+---------+
    | 1   |1   |Cloud.png|
    +-- --+----+---------+
    | 2   |1   |Wire.png |
    +--------------------+

    +-----+--------+------------+-----+---+
    |MPKID|PckgName|PDesc       |Price|MID|
    +-----+--------+------------+-----+---+
    |1    |basic   |Starter Pckg|20.5 |1  |
    +-----+--------+------------+-----+---+
    |2    |Enhanced|advance pckg|66.5 |1  |
    +-------------------------------------+
我想要的最终结果是:

    +----+-------+----------+-----+---------+-----+--------+------------+-----+
    | MID| Name  | Desc     | MIID| ICON    |MPKID|PckgName|PDesc       |Price|
    +-----------------------+-----+---------+-----+--------+------------+-----+
    | 1  |RNO-505|Wifi Modem| 1   |Cloud.png|1    |basic   |Starter Pckg|20.5 | 
    +-----------------------+-----+---------+-----+--------+------------+-----+
    | 1  |RNO-505|Wifi Modem| 2   |Wire.png |2    |Enhanced|advance pckg|66.5 | 
    +-------------------------------------------------------------------------+
我正在使用此查询:

select * from modems a join ModemsImage b on a.mid=b.mid join ModemsPckg c on a.mid=c.mid
但这不会给我正确的输出,它返回的重复记录只是MPKID不同。 谢谢 编辑::当我使用这个查询时,它会显示完美的2条记录

    select c.MPKID from modems a join ModemsImage b on a.mid=b.mid join ModemsPckg c on a.mid=c.mid group by c.MPKID
但当我试图检索更多的列时,它就开始复制行

调制解调器有一行,其中MID=1。 ModemImage有两行,其中MID=1。 ModemsPckg有两行,其中MID=1。 您将在MID之前将它们全部连接起来,因此您将获得:

调制解调器第1行+调制解调器映像第1行+调制解调器PCKG第1行 调制解调器第1行+调制解调器映像第1行+调制解调器PCKG第2行 调制解调器第1行+调制解调器映像第2行+调制解调器PCKG第1行 调制解调器第1行+调制解调器映像第2行+调制解调器PCKG第2行
为什么您还需要其他条件?

您需要在ModemsImage和ModemsPckg上添加其他条件。 例如:

select * from modems a 
INNER JOIN ModemsImage b on a.mid=b.mid 
INNER JOIN ModemsPckg c on a.mid=c.mid AND b.MIID=c.MPKID

你有4行,不是吗?是的,我有4行,但我只想要2行。使用join as“调制解调器a join MODEMSIGEB on a.mid=b.mid join MODEMMSPCKG c on b.mid=c.mid和b.MPKID=c.MPKID”我的查询错误,我不想得到重复的记录。因此,你必须找出这些表之间的关系。也许有一个额外的表连接它们?我创建了这些表,我必须构建逻辑。我失败了,所以我请求帮助。我不知道ModemsImage和ModemsPckg之间的关系。您可能应该执行以下操作之一:1将MIID添加到ModemsPckg 2将MPKID添加到ModemsImage 3创建一个包含MIID和MPKID的附加表您是如何确定b.MIID=c.MPKID的?实际上,我也不确定,我猜根据示例数据,没有其他列可以作为链接键的,我猜示例描述的模式有两个包,每个包都有一个图像。据我所知,如果包装的形象发生变化,它可以被视为不同的包装。但我确信这是否是贝尔的实际业务,只给出一些提示,我确信这两列之间没有关系。MIID是ModemsImage ID的快捷方式,MPKID是ModemsPckg ID的快捷方式。