MySQL从其他表

时间:2017-05-18 08:43:07

标签: mysql

有点难以解释我的意思。

我的陈述看起来像

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的其他表中的类别名称。

2 个答案:

答案 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

你可以使用内部联接来帮助