在MySQL中创建TRIGGER - 需要执行INTERSECT函数

时间:2016-11-22 23:52:02

标签: mysql

基本上我想执行这两个查询并执行交叉操作:

(SELECT DISTINCT C.hospital_id FROM hospital.consulta C 
INNER JOIN hospital.enfermaria E WHERE C.consulta_id = 2)
-- INTERSECT
(SELECT DISTINCT E.hospital_id FROM hospital.enfermaria_atendimento EA 
INNER JOIN hospital.enfermaria E WHERE E.enfermaria_id = 1);

然而,似乎MySQL(INTERSECT)中没有这样的东西。这是为了让我在我的表hospital.enfermaria_atendimento中创建一个TRIGGER BEFORE INSERT,以确保每个元组都是一致的。

enfermaria_atendimento表包含consulta_id和enfermaria_id属性。这两个属性都是不同表(表consulta和table enfermaria)的外键,这两个表(两者)都与表医院有关系。 enfermaria_atendimento的新元组不能包含与属于不同hospital_id的enfermaria_id相关的consulta_id。

我硬编码了特定的enfermaria_id = 1和hospital_id = 2仅用于模拟目的。而不是具体的数字我打算使用新的信息。插入

我尝试使用以下方法模拟INTERSECT参数:

SELECT DISTINCT E.hospital_id FROM hospital.enfermaria_atendimento EA 
INNER JOIN hospital.enfermaria E WHERE E.enfermaria_id = 1
WHERE E.hospital_id 
    IN (
        SELECT C.hospital_id FROM hospital.consulta C
        INNER JOIN hospital.enfermaria_atendimento EA ON C.consulta_id=2
    );

但到目前为止没有成功......

1 个答案:

答案 0 :(得分:1)

我相信您案例中的INTERSECT可以像下面一样进行模拟(使用额外的联接):

SELECT DISTINCT E.hospital_id 
FROM hospital.enfermaria_atendimento EA 
INNER JOIN hospital.enfermaria E ON 
  ?? = ?? -- put conditions here
INNER JOIN (
  SELECT DISTINCT C.hospital_id
  FROM hospital.consulta C
  INNER JOIN hospital.enfermaria_atendimento EA ON 
    ?? = ?? -- put conditions here
  WHERE C.consulta_id = 2
  ) F ON E.hospital_id = F.hospital_id
WHERE
  E.enfemaria_id = 1

您必须指定加入条件,查询中缺少这些条件。