mysql - 选择在给定集合之外没有属性的项目

标签 mysql

我需要有关 MySQL 查询的帮助。 我有 2 个表,一个名为 cars,另一个名为 accessories(这是虚构的)。

cars 表中的一辆汽车在表中载有一组配件。 汽车 table 看起来像这样。

ID
Name
Accessory 1
Accessory 2
Accessory 3
Accessory 4
Accessory 5
etc..

然后我希望用户使用复选框指定他想要的配件。 然后运行查询以显示 cars 中的各种汽车,那些或更少的配件。

示例:

ID = 1
Name = Ford Mondeo
Accessory 1 = AC
Accessory 2 = Turbo

ID = 2
Name = Ford Mondeo SE
Accessory 1 = AC
Accessory 2 = Turbo
Accessory 3 = Cruise control
Accessory 4 = CD

ID = 3
Name = Ford Mustang
Accessory 1 = AC
Accessory 2 = Turbo
Accessory 3 = Cruise control
Accessory 4 = CD
Accessory 5 = DVD

如果用户指定了ACTurboCruise controlCD,那么第1和第2辆车应该显示,但不是第 3 个,因为它们没有勾选 DVD

结果不应显示任何未“勾选”的帖子。

我希望有人能帮我为这个操作构造一个查询。

最佳答案

首先,正如其他人所建议的那样,您应该有一张表用于汽车,一张用于配件,还有一张链接表列出每辆车有哪些配件。举个简单的例子,您可以像这样设置表格:

CREATE TABLE cars (
  id INTEGER NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL
);

CREATE TABLE accessories (
  id INTEGER NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  UNIQUE KEY (name)  /* for efficient lookups by name */
);

CREATE TABLE car_accessories (
  car INTEGER NOT NULL,
  accessory INTEGER NOT NULL,
  PRIMARY KEY (car, accessory),
  UNIQUE KEY (accessory, car)
);

要列出除ACTurboCruise controlCD 之外没有其他配件的所有汽车,然后您可以使用 NOT EXISTS 子选择 ( SQLize ):

SELECT *
FROM cars AS c
WHERE NOT EXISTS
  ( SELECT * FROM car_accessories AS ca, accessories AS a
    WHERE ca.car = c.id
      AND ca.accessory = a.id
      AND a.name NOT IN ('AC', 'Turbo', 'Cruise control', 'CD') )

LEFT JOIN ( SQLize ):

SELECT c.*
FROM cars AS c
  LEFT JOIN 
    ( car_accessories AS ca
      JOIN accessories AS a
        ON ca.accessory = a.id
        AND a.name NOT IN ('AC', 'Turbo', 'Cruise control', 'CD')
    ) ON ca.car = c.id
WHERE ca.car IS NULL

关于mysql - 选择在给定集合之外没有属性的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9571114/

相关文章:

javascript - 在动态添加的表行上添加 onclick 函数

php - 如何同步mysql数据库请求?

php - 访问结果集行中的值,其中该值来自 MySQL 函数调用

mysql - 使用 Mysql 更改链接的一部分

mysql - SQL - 1388 字符 SQL 查询。 (必须是更简单的解决方案吗?)

mysql - 在 MySQL 中创建一个 rownum 列

mysql - MySQL5.1 with InnoDB 回滚次数有上限吗?

php - 从 MySQL 获取 PHP 值,如果没有记录 - 插入它

mysql - count对sql有什么影响

mysql - 编辑 MySql 数据库记录