Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL内部联接不同_Sql_Join_Distinct_Inner Join - Fatal编程技术网

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 to
Products)和
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
的一行,我们应该怎么做?有无
不同的