首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在两个表中选择具有where子句的MySQL数据

在两个表中选择具有where子句的MySQL数据
EN

Stack Overflow用户
提问于 2011-01-26 14:28:47
回答 7查看 5.4K关注 0票数 4

我有两个MySQL表,如下例所示:

汽车

代码语言:javascript
运行
复制
Id     CAR NAME          AGE

1   Ford        2 years
2   AUDI        1 years 
3   Ford        2 years

选项

代码语言:javascript
运行
复制
Id  id_car   option

1    1      ESP
2    2          ABS
3    3          ABS
4    3          ESP

我需要选择所有2岁的汽车,其中有防抱死和电除尘器。因此,在这个例子中,它应该返回:3 Ford

EN

回答 7

Stack Overflow用户

发布于 2011-01-26 14:36:29

小组成员将确保汽车具有所需的两种功能。

代码语言:javascript
运行
复制
select c.id, c.name
    from cars c
        inner join options o
            on c.id = o.id_car
                and o.option in ('ABS','ESP')
    where c.age = 2
    group by c.id, c.name
    having count(distinct o.option) = 2
票数 8
EN

Stack Overflow用户

发布于 2011-01-26 14:36:53

代码语言:javascript
运行
复制
SELECT * FROM CARS WHERE id IN 
(SELECT id_car FROM OPTIONS WHERE GROUP_CONCAT(option) ='ABS,ESP' 
GROUP BY id_car) 
WHERE age ='2 years' GROUP BY CARS.name
票数 2
EN

Stack Overflow用户

发布于 2011-01-26 14:34:12

您需要在OPTIONS表上使用一个联接:

代码语言:javascript
运行
复制
SELECT c.* FROM CARS c
JOIN OPTIONS o ON o.id_car=c.id AND o.option='ABS'
JOIN OPTIONS o2 ON o2.id_car=c.id AND o2.option='ESP'
WHERE c.age >= 2

或子查询:

代码语言:javascript
运行
复制
SELECT c.* FROM CARS c
WHERE c.age >= 2
AND c.id IN ( SELECT o.id_car FROM OPTIONS o WHERE o.id_car=c.id AND o.option='ABS')
AND c.id IN ( SELECT o.id_car FROM OPTIONS o WHERE o.id_car=c.id AND o.option='ESP')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4805646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档