有点难以解释我的意思。
我的陈述看起来像
select
c.categories_name,
max(pc.categories_id),
pc.products_id
from
products_to_categories pc,
categories_description c
where
pc.products_id = 517
group by
pc.products_id
在我的products_to_categories
表格中存储了一些数据,如
|categories_id | products_id|
|1 | 515 |
|22 | 515 |
|1 | 517 |
|13 | 517 |
|2 | 520 |
|29 | 520 |
------------------------------
实际上,我想选择产品具有类别1的所有类别。
在这种情况下,这将是产品515和517。
使用我的选择,它会返回正确的值22, 13
因为group by
将每个产品带到一行,max()
选择更高的值。什么是我想要的。
现在有第二个表存储了这些类别的名称。我尝试了几个选项但没有成功。而且我不想使用第二个选择(subselect)来获取这些名称。
这甚至可能吗?或者我真的需要做一个子选择吗?
我记得在SQLBase(旧数据库)中我可以使用一些选定的值来比较where子句中的一些....但是我真的不记得它是如何工作的。
我试过
select
c.categories_name,
max(pc.categories_id),
pc.products_id
from
products_to_categories pc,
categories_description c
where
pc.products_id = 517
and
c.categories_id = pc.categories_id --i hoped this line helps...
group by
pc.products_id
选择这样可以返回低级ID
中的名称澄清我的成就:
我首先要求表1中的所有产品都具有类别1和另一个。例如13。 在此之后我只想要更高的类别(我的样本中有13个)。最后我想要一个id为13的其他表中的类别名称。
答案 0 :(得分:0)
我认为您需要一个having
子句,例如:
select
c.categories_name,
max(pc.categories_id),
pc.products_id
from
products_to_categories pc,
categories_description c
where
pc.products_id = 517
group by
pc.products_id, c.categories_name, c.categories_id
having
max(pc.categories_id) = c.categories_id
答案 1 :(得分:-1)
select
c.categories_name,
max(pc.categories_id),
pc.products_id
from
products_to_categories pc
join categories_description c on c.categories_id = pc.categories_id
where
pc.products_id = 517
group by
pc.products_id,c.categories_name
你可以使用内部联接来帮助