sql JOIN 导致双行
Posted
技术标签:
【中文标题】sql JOIN 导致双行【英文标题】:sql JOIN cause double rows 【发布时间】:2020-05-17 06:13:30 【问题描述】:我有两张桌子需要加入它们
我使用这个 sql 查询创建的第一个表
CREATE TABLE `users` (
`id` bigint PRIMARY KEY AUTO_INCREMENT,
`user_login` varchar(60),
`user_pass` varchar(255),
`first_name` varchar(30),
`last_name` varchar(30),
`user_status` int(2),
`user_phone_number` varchar(20),
`user_email` varchar(100),
`user_billing_info` text,
`user_temp_units` int(2),
`user_flow_units` int(2),
`user_notes` text
);
第二张桌子
CREATE TABLE `station_meta` (
`uid` VARCHAR(25) PRIMARY KEY,
`nickname` varchar(30),
`install_date` date,
`latatude` numeric(10,6),
`longitude` numeric(10,6),
`firmware_ver` varchar(10),
`weir_type` int(2),
`weir_width` numeric,
`dist_to_ground` numeric,
`dist_to_weir` numeric,
`service_fee` numeric,
`notes` text
);
当我使用这个 sql 查询时,我得到了双行
SELECT * FROM station_meta JOIN users
注意:如果需要提及,uid 类似于 9C9Z454Z5CA
所以在另一个表中没有任何列是相同的
更新
数据样本
我的结果
我在 foreach 的 php 函数中使用它,所以我得到了双重结果
感谢任何帮助
【问题讨论】:
更新您的问题,添加适当的数据样本、您的实际结果、您的预期结果并解释 2 个表是如何连接的(2 个表中的哪些列用于连接) @scaisEdge 好的,现在就这样做 @scaisEdge 请检查,我更新了问题,我使用我提到的简单查询加入了他们,table1 JOIN table2 我没有使用任何列进行连接,我尝试使用 table1 作为 z JOIN table2 as x in z.id=x.uid 但这没有意义,因为 uid 与 id 不同 看你的结果..你没有重复的行(在第一行中 uid 和 nicname 是重复的,但不是昵称)。你在两个表之间只有一个笛卡尔积(事实上你没有加入元素并减少结果)..所以你应该添加你的预期结果 对不起@scaisEdge 我真的很困惑,您对此有何建议或解决方案?是什么导致双排? 【参考方案1】:您似乎错过了两个表之间的关系.. 如果你想避免笛卡尔积并只检索两个表之间的匹配值,你应该添加一个关系为
table user_station_meta (
`id` bigint PRIMARY KEY AUTO_INCREMENT,
user_id bigint
station_meta_uid VARCHAR(25)
)
once you have inserted the matching values
uid, id
9c2748.. 1
BC8CD4.. 5
你可以选择单个匹配结果为
select u.*. s.*
from user_station_meta us
JOIN station_meta s on s.uid = us.uid
JOIN users u on u.id = us.id
【讨论】:
以上是关于sql JOIN 导致双行的主要内容,如果未能解决你的问题,请参考以下文章
SQL Select - Union 结合 Join 查询导致错误
关于SQL 查询效率问题 left join 改成 inner join union