我有表产品和列表。执行以下查询时:
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'
这将返回其中一个产品详情的双重条目。为什么 DISTINCT 无效?
修改
产品:
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
基本上我想通过listings
到PRODUCT_NUMBER
表创建与product
表匹配的结果行。这对于电话列表网站的搜索功能来说更精确。
更具体地说,搜索功能使用products
表进行搜索,然后使用listings
表格显示有关电话列表的有用信息。
ANSWER
SELECT DISTINCT *
FROM listings
INNER JOIN products
ON products.product_number=listings.product_number
以上就是这个伎俩;简单地将桌子交换成圆形。我还在listings
中插入了更多行,“问题”消失了。即使它没有解决,也不再发生......不确定问题是什么。
答案 0 :(得分:2)
我相信你只是期待来自DISTINCT
的某些东西不会那样......
假设您的表Products
包含ID
和Name
,表Listings
包含ID
,ProductID
(FK到{{清单_date`(只是为了让事情变得更简单......)
此外,假设您的表格Products), and
有条目:
Products
和表格ID Name
1 Foobar
2 Bazfoo
有条目
Listings
如果您加入这两个表并应用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
关键字应用于所有列 - 仅当结果集中的所有列相同时,才会过滤掉一行。< / p>
根据您的评论,我认为您应该排除包含DISTINCT
和ID = 1
的“重复”产品。这是 NOT 情况 - 请参阅结果集 - 如果查看所有四列,那两行Name = Foobar
NOT 相同 - 因此,他们会两者都出现了。
这就是定义ProdID = 1
关键字的方式。
如果你想“过滤掉”ID = 1的重复产品 - DISTINCT
表中的哪两个条目你希望显示在结果集中?
答案 1 :(得分:1)
如果有记录中有2个列表加入单个产品,那么这将产生您所看到的内容:
select内部连接的结果
我将使用公共连接值从每个表中选择*并查看结果
HTH
伊恩