如何 select 来自 table 的行匹配来自第二个 table 的所有行,其中有谓词?

How to select rows from a table that matches all the rows from a second table which has predicates?

我有两个table,一个交易table和一个交易属性 table如下。

交易table

CREATE TABLE `mydb`.`event` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `user` VARCHAR(45) NOT NULL,
  `type` INT NOT NULL,
   PRIMARY KEY (`id`));

属性 table

CREATE TABLE `mydb`.`event_property` (
  `event_id` INT NOT NULL,
  `property_type` VARCHAR(45) NOT NULL,
  `value` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`event_id`, `property_type`, `value`),
  CONSTRAINT `event_id`
    FOREIGN KEY (`event_id`)
    REFERENCES `mydb`.`event` (`id`)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT);

一个事件可能有多个属性。我想 select 具有两个具有特定值的属性的特定事件。如何做到这一点?

您可以使用 group byhaving 来做到这一点:

select event_id
from event_property
where property_type in ('1', '2')
group by event_id
having count(distinct property_type) = 2;