简体   繁体   English

MySQL:选择包含一列值的多行

[英]MySQL: Select multiple rows containing values from one column

I'd like to find the car_id's of the cars that have 'FORD' AND 'SILVER' AND the user input value of '200' in the value column: 我想在价值列中找到'FORD'和'SILVER'以及用户输入值'200'的汽车的car_id:

table_cars

    +----+--------+----------+-----------+
    | id | car_id | name     | value     |
    +----+--------+----------+-----------+
    | 1  | 1      | MAKE     | FORD      |
    | 2  | 1      | CARLINE  | FIESTA    |
    | 3  | 1      | COLOR    | SILVER    |
    | 4  | 1      | TOPSPEED | 210KM/H   |
    | 5  | 2      | MAKE     | FORD      |
    | 6  | 2      | CARLINE  | FOCUS     |
    | 7  | 2      | COLOR    | SILVER    |
    | 8  | 2      | TOPSPEED | 200KM/H   |
    | 9  | 3      | MAKE     | HOLDEN    |
    | 10 | 3      | CARLINE  | ASTRA     |
    | 11 | 3      | COLOR    | WHITE     |
    | 12 | 3      | TOPSPEED | 212KM/H   |
    +----+--------+----------+-----------+

Which in this case should return only one car_id: car_id = 2. 在这种情况下,应该只返回一个car_id:car_id = 2。

What would be the way to go to create the SQL query for this? 为此创建SQL查询的方法是什么?

What you have is a properties table. 你拥有的是一个属性表。 When you want to test multiple properties at once you need to join the table to itself: 如果要一次测试多个属性,则需要将表连接到自身:

SELECT c0.car_id
FROM table_cars AS c0
JOIN table_cars AS c1 ON c1.car_id=c0.car_id
JOIN table_cars AS c2 ON c2.car_id=c1.car_id
WHERE c0.name='MAKE' AND c0.value='FORD'
AND c1.name='COLOR' AND c1.value='SILVER'
AND c2.name='TOPSPEED' AND c2.value='200KM/H'

Having the surrogate id present in a properties table is questionable. 在属性表中显示代理id是值得怀疑的。 It doesn't seem to be doing anything; 它似乎没有做任何事情; each property isn't an entity of its own. 每个财产都不是自己的实体。 Unless the id is required by some other element, I'd get rid of it and make car_id, name the primary key (a composite primary key). 除非某些其他元素需要id否则我将删除它并car_id, name主键(复合主键)。

I assume that every car needs to have variable parameters, otherwise you wouldn't have gone with a setup like this. 我假设每辆车都需要有可变参数,否则你不会选择这样的设置。 It would be much easier if MAKE, CARLINE, COLOR, and TOPSPEED each had their own column. 如果MAKE,CARLINE,COLOR和TOPSPEED都有自己的专栏会容易得多。

Using the table you've provided, however, you need to use subqueries. 但是,使用您提供的表,您需要使用子查询。 http://dev.mysql.com/doc/refman/5.0/en/subqueries.html http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

The query should look something like this (untested): 查询应该看起来像这样(未经测试):

SELECT * FROM table_cars WHERE id IN (SELECT * FROM table_cars WHERE name="MAKE" AND value="FORD") AND id IN (SELECT * FROM table_cars WHERE name="COLOR" AND value="SILVER") AND id IN (SELECT * FROM table_cars WHERE name="TOPSPEED" AND value="200KM/H")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM