如何 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 by
和 having
来做到这一点:
select event_id
from event_property
where property_type in ('1', '2')
group by event_id
having count(distinct property_type) = 2;
我有两个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 by
和 having
来做到这一点:
select event_id
from event_property
where property_type in ('1', '2')
group by event_id
having count(distinct property_type) = 2;