多表上的SQL连接
我有3个SQL表:调制解调器、调制解调器映像和调制解调器PCKG多表上的SQL连接,sql,sql-server,database,Sql,Sql Server,Database,我有3个SQL表:调制解调器、调制解调器映像和调制解调器PCKG +----+-------+----------+ | MID| Name | Desc | +----+-------+----------+ | 1 |RNO-505|Wifi Modem| +-----------------------+ +--- -+----+---------+ | MIID| MID| ICON | +-- --+-
+----+-------+----------+
| 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的快捷方式。