SQL内部联接不同
我有表产品和列表。执行以下查询时:SQL内部联接不同,sql,join,distinct,inner-join,Sql,Join,Distinct,Inner Join,我有表产品和列表。执行以下查询时: SELECT DISTINCT * FROM products INNER JOIN listings ON products.product_number=listings.product_number 这是“搜索”功能: WHERE products.product_number !='' AND listings.monthly_price BETWEEN '0' AND '10' 这将返回其中一个产品列表的双条目。为什么不明显不起作用 编辑 产品
SELECT DISTINCT *
FROM products
INNER JOIN listings
ON products.product_number=listings.product_number
这是“搜索”功能:
WHERE products.product_number !=''
AND listings.monthly_price BETWEEN '0' AND '10'
这将返回其中一个产品列表的双条目。为什么不明显不起作用
编辑
产品:
product_number, make, model model_number, colour, processor, battery_standby, battery_talk, camera, flash, screen_size, screen_res, memory
清单:
listing_number, featured, date, member_id, network, length, product_number, monthly_price, minutes, texts, data, image1
基本上,我希望通过产品编号
创建与产品
表匹配的列表
结果行。这是为了让手机列表网站的搜索功能更加精确
更具体地说,搜索功能使用产品
表进行搜索,然后使用列表
表显示有关手机列表的有用信息
回答
SELECT DISTINCT *
FROM listings
INNER JOIN products
ON products.product_number=listings.product_number
以上的方法奏效了;简单地交换桌子。我还在
列表中插入了几行,问题就消失了。即使它没有解决,它也不会再发生了。。。不确定问题出在哪里。如果有一个记录,其中两个列表加入一个产品,那么这将产生您看到的结果:
对内部联接的结果执行select distinct
我将使用公共联接值从每个表中选择*并查看结果
嗯
伊恩我相信你只是期待着从DISTINCT
那里得到一些东西,而不是那样的
假设您有一个带有ID
和Name
的表Products
,以及带有ID
、ProductID
(FK toProducts)和Listing_date`的表Listings
(只是为了让这里的事情简单一点……)
此外,假设您的表Products
包含以下条目:
ID Name
1 Foobar
2 Bazfoo
并且表列表中有条目
ID ProductID ListingDate
1 1 2012-01-01
2 1 2012-03-01
3 2 2012-04-01
如果将这两个表合并并应用一个DISTINCT
SELECT DISTINCT ProdID = p.ID, p.Name, ListingID = l.ID, l.ListingDate
FROM dbo.Products p
INNER JOIN dbo.Listings l ON l.ProductID = p.ID
你期望得到什么样的结果
结果将是:
ProdID Name ListingID ListingDate
1 Foobar 1 2012-01-01
1 Foobar 2 2012-03-01
2 Bazfoo 3 2012-04-01
DISTINCT
关键字将应用于所有列——仅当结果集中的所有列
相同时,才会过滤出一行
从您的评论中,我相信您希望排除ID=1和Name=Foobar的“重复”产品。这是非情况-请参见结果集-如果查看所有四列,则ProdID=1
的两行不相同-因此,它们都将显示
这就是DISTINCT
关键字的定义方式
如果要“过滤”ID=1的重复产品-您希望在结果集中显示
列表中的两个条目中的哪一个?将DISTINCT
应用于所有列-您认为“双条目”的两行中的所有列是否相同?DISTINCT*将返回符合您标准的产品
和列表
中所有字段的不同排列。您肯定是指DISTINCT products.productId、listings.listingid或类似的产品?@Nick,这两行上肯定有一些不同,这就是为什么返回两行的原因。请显示返回的双输入项。主键列究竟为什么允许空字符串?第一个的地方
的情况非常可怕。。。更不用说,monthly\u price
显然是一个文本字段,而不是一个数字。无论如何,DISTINCT
永远不会返回重复的字段,因此在您认为重复的两行之间,至少有一个字段值必须不同。我想说的是,即使忘记SELECT*,因为这是一个坏主意,除非在您真正整理所有内容时返回1%:)好的,谢谢:)那么我该如何编写“公共连接”在这种情况下。更多细节请参见我对以下答案的评论。好吧,尼克,你正处于一个相当陡峭的学习曲线的底部,但是有很多东西可以帮助你。当我开始的时候,我发现《傻瓜》系列写得很好,并且非常擅长解释基本的构建模块。有一个“傻瓜的sql”。我希望它也能达到同样的高标准。否则,谷歌关于构建sql查询的介绍或实际上的sql基础知识并不太难,如果你阅读“Kalen Delany的inside sql”,或者你会知道你需要的一切,那么我基本上希望创建结果行,通过产品编号
将列表
表与产品表匹配。这是为了让手机列表网站的搜索功能更加精确。更具体地说,搜索功能使用产品
表进行搜索,然后使用列表
表来显示有关手机列表的有用信息。@NickPrice:当然-但是再次说明:您要显示列表
中的哪一行,如果您只想显示一行ProdID=1/Name=Foobar
,则有两行(此处-可能更多)列表中的行
对于产品中的那一行
-如果您只想显示产品中的一行
-您想查看列表中的哪一行
以及您想忽略哪些其他行??问题查询的结果:37,苹果,iPhone,4,黑色
36,苹果,iPhone,4S,白色
37,苹果,iPhone,4,黑色
我想删除副本。对不起-无意中按了回车键。在这里格式化这样的东西不是问题@marc_s如果我们想删除Name
列中包含Foobar
的一行,我们应该怎么做?有无不同的?