要插入到没有重复项的SQL查询

时间:2017-11-30 23:29:32

标签: mysql sql database

我正在建立一个大学停车申请数据库。如果SPACE中的车辆没有有效停放,我需要一个插入我们的PARKING_VIOLATION表的查询。例如,他们有一个无效的停车证。我想把它变成一个每隔约5分钟重复一次的SQL工作,但是在向某人发票之后它不会检测到重复。

我的查询

INSERT INTO PARKING_VIOLATION(Id, DateIssued, Description, Cost, VehicleRecieved)
    VALUES(NULL,CURRENT_TIMESTAMP,'Invalid Parking Pass','75',(
 SELECT
  VEHICLE.Id
FROM
  SPACE INNER JOIN VEHICLE ON (SPACE.OccupiedBy=VEHICLE.Id)
WHERE
  VEHICLE.PassId != SPACE.PassRequired));

我尝试过REPLACE,INSERT WHERE NOT EXISTS,或者可能需要一种方法来比较DateIssued和今天。

1 个答案:

答案 0 :(得分:1)

尝试这样的事情,在最后添加另一个WHERE以确保同一辆车在同一天没有预订两次。 抱歉时间/日期转换,但我已经习惯了Oracle的TRUNC并且不得不快速搜索MySQL版本,我不知道为什么我认为你使用MySQL虽然:-D

INSERT INTO PARKING_VIOLATION(Id, DateIssued, Description, Cost, VehicleRecieved)
(SELECT NULL,CURRENT_TIMESTAMP,'Invalid Parking Pass','75', VEHICLE.Id
FROM SPACE 
INNER JOIN VEHICLE ON (SPACE.OccupiedBy=VEHICLE.Id)
WHERE VEHICLE.PassId <> SPACE.PassRequired)
WHERE VehicleRecieved NOT IN(
    SELECT VehicleReceived FROM PARKING_VIOLATION 
    WHERE DATE_FORMAT(FROM_UNIXTIME(DateIssued), '%e %b %Y') = DATE_FORMAT(FROM_UNIXTIME(CURRENT_TIMESTAMP), '%e %b %Y')
);