创建一个 MySQL 查询
Create an MySQL query
我有一个这样的table
http://sqlfiddle.com/#!9/052381/1
我需要创建一个请求来查找满足以下条件的 VIN 代码:
- VIN 以 XTA% 开头
- 我有注册历史:date_reg_last 值:1306440000,1506715200,1555963200。您只需要 select 那些恰好具有这些值的 VIN 代码。如果有更多或更少的记录 - VIN 不匹配
- 我有一个 owner_type 匹配值 1306440000,1506715200,1555963200: 2, 2, 2. 即。对于记录 1306440000 owner_type 必须为 2,对于记录 1506715200 也必须为 2,等等。每个条目的类型可以不同。
- 与第三点类似,我有区域:УЛЬЯНОВСКΓ.,УЛЬЯНОВСКΓ.,С РУНГА
- 我有一年,应该在所有记录中。
我试过这样提出请求
SELECT *
FROM `ac_gibdd_shortinfo`
WHERE `vin` LIKE 'XTA%'
AND `model` LIKE '%1119%'
AND `date_reg_first` IN (0,1506715200,1555963200)
AND `date_reg_last` IN (1306440000,1506715200,1555963200)
AND `year` LIKE '2011'
AND `location` IN ('УЛЬЯНОВСК Г.','С РУНГА')
但它会找到具有不同数量注册记录的记录。只有一个想法:获取所有匹配的记录,然后通过附加请求按编号过滤。
测试一下:
SELECT *
FROM `ac_gibdd_shortinfo` t0
WHERE `vin` LIKE 'XTA%'
AND `model` LIKE '%1119%'
AND `date_reg_first` IN (0,1506715200,1555963200)
AND `date_reg_last` IN (1306440000,1506715200,1555963200)
AND `year` LIKE '2011'
AND `location` IN ('УЛЬЯНОВСК Г.','С РУНГА')
AND NOT EXISTS ( SELECT NULL
FROM ac_gibdd_shortinfo t1
WHERE t0.vin = t1.vin
AND t1.date_reg_first NOT IN (0,1506715200,1555963200) )
AND NOT EXISTS ( SELECT NULL
FROM ac_gibdd_shortinfo t2
WHERE t0.vin = t2.vin
AND t2.date_reg_last NOT IN (1306440000,1506715200,1555963200) )
AND NOT EXISTS ( SELECT NULL
FROM ac_gibdd_shortinfo t3
WHERE t0.vin = t3.vin
AND t3.location NOT IN ('УЛЬЯНОВСК Г.','С РУНГА') )
PS。根据指数会有所改善。
and have count (1306440000,1506715200,1555963200) - 3 records in total by VIN – blood73
SELECT vin, model, date_reg_first, date_reg_last, `year`, location
FROM `ac_gibdd_shortinfo` t0
WHERE `vin` LIKE 'XTA%'
AND `model` LIKE '%1119%'
AND `date_reg_first` IN (0,1506715200,1555963200)
AND `date_reg_last` IN (1306440000,1506715200,1555963200)
AND `year` LIKE '2011'
AND `location` IN ('УЛЬЯНОВСК Г.','С РУНГА')
AND 3 = ( SELECT COUNT(*)
FROM ac_gibdd_shortinfo t1
WHERE t0.vin = t1.vin );
我有一个这样的table http://sqlfiddle.com/#!9/052381/1
我需要创建一个请求来查找满足以下条件的 VIN 代码:
- VIN 以 XTA% 开头
- 我有注册历史:date_reg_last 值:1306440000,1506715200,1555963200。您只需要 select 那些恰好具有这些值的 VIN 代码。如果有更多或更少的记录 - VIN 不匹配
- 我有一个 owner_type 匹配值 1306440000,1506715200,1555963200: 2, 2, 2. 即。对于记录 1306440000 owner_type 必须为 2,对于记录 1506715200 也必须为 2,等等。每个条目的类型可以不同。
- 与第三点类似,我有区域:УЛЬЯНОВСКΓ.,УЛЬЯНОВСКΓ.,С РУНГА
- 我有一年,应该在所有记录中。
我试过这样提出请求
SELECT *
FROM `ac_gibdd_shortinfo`
WHERE `vin` LIKE 'XTA%'
AND `model` LIKE '%1119%'
AND `date_reg_first` IN (0,1506715200,1555963200)
AND `date_reg_last` IN (1306440000,1506715200,1555963200)
AND `year` LIKE '2011'
AND `location` IN ('УЛЬЯНОВСК Г.','С РУНГА')
但它会找到具有不同数量注册记录的记录。只有一个想法:获取所有匹配的记录,然后通过附加请求按编号过滤。
测试一下:
SELECT *
FROM `ac_gibdd_shortinfo` t0
WHERE `vin` LIKE 'XTA%'
AND `model` LIKE '%1119%'
AND `date_reg_first` IN (0,1506715200,1555963200)
AND `date_reg_last` IN (1306440000,1506715200,1555963200)
AND `year` LIKE '2011'
AND `location` IN ('УЛЬЯНОВСК Г.','С РУНГА')
AND NOT EXISTS ( SELECT NULL
FROM ac_gibdd_shortinfo t1
WHERE t0.vin = t1.vin
AND t1.date_reg_first NOT IN (0,1506715200,1555963200) )
AND NOT EXISTS ( SELECT NULL
FROM ac_gibdd_shortinfo t2
WHERE t0.vin = t2.vin
AND t2.date_reg_last NOT IN (1306440000,1506715200,1555963200) )
AND NOT EXISTS ( SELECT NULL
FROM ac_gibdd_shortinfo t3
WHERE t0.vin = t3.vin
AND t3.location NOT IN ('УЛЬЯНОВСК Г.','С РУНГА') )
PS。根据指数会有所改善。
and have count (1306440000,1506715200,1555963200) - 3 records in total by VIN – blood73
SELECT vin, model, date_reg_first, date_reg_last, `year`, location
FROM `ac_gibdd_shortinfo` t0
WHERE `vin` LIKE 'XTA%'
AND `model` LIKE '%1119%'
AND `date_reg_first` IN (0,1506715200,1555963200)
AND `date_reg_last` IN (1306440000,1506715200,1555963200)
AND `year` LIKE '2011'
AND `location` IN ('УЛЬЯНОВСК Г.','С РУНГА')
AND 3 = ( SELECT COUNT(*)
FROM ac_gibdd_shortinfo t1
WHERE t0.vin = t1.vin );