如何从表中选择与具有谓词的第二个表中的所有行匹配的行?

时间:2015-06-26 10:57:10

标签: mysql join exists

我有两个表,一个事务表和一个事务属性表,如下所示。

交易表

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

属性表

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);

单个事件可能具有多个属性。我想选择一个具有两个具有特定值的属性的事件。怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用group byhaving

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