Они не могут быть все действительны по одной строке, потому что при выполнении запроса предложения и являются исключительными.
Вы должны проверить, все ли три действительны одновременно, например, по сумме, как в моем примере
Так что используйте
SELECT
p.id
FROM
property p
INNER JOIN
(SELECT
`property_id`
FROM
property_meta pm
GROUP BY `property_id`
HAVING SUM(pm.meta_key = 'property_area'
AND pm.meta_value IN (1208)) + SUM(pm.meta_key = 'property_region'
AND pm.meta_value IN (1207)) + SUM(pm.meta_key = 'property_city'
AND pm.meta_value IN (1237)) = 3) pm ON p.id = pm.property_id
WHERE
LOWER(p.title) LIKE CONCAT('%%')
AND p.deleted = 0
GROUP BY p.id
CREATE TABLE property (
`id` INTEGER,
`title` VARCHAR(5),
`deleted` INTEGER
);
INSERT INTO property
(`id`, `title`, `deleted`)
VALUES
('1', 'test', '0'),
('2', 'test2', '0');
CREATE TABLE property_meta (
`id` INTEGER,
`property_id` INTEGER,
`meta_key` VARCHAR(15),
`meta_value` INTEGER
);
INSERT INTO property_meta
(`id`, `property_id`, `meta_key`, `meta_value`)
VALUES
('1', '1', 'property_area', '1208'),
('2', '1', 'property_region', '1207'),
('3', '1', 'property_city', '1237'),
('4', '2', 'property_area', '1208'),
('5', '2', 'property_region', '1207'),
('6', '2', 'property_city', '1237');
✓
✓
✓
✓
SELECT
p.id
FROM
property p
INNER JOIN
(SELECT
`property_id`
FROM
property_meta pm
GROUP BY `property_id`
HAVING SUM(pm.meta_key = 'property_area'
AND pm.meta_value IN (1208)) + SUM(pm.meta_key = 'property_region'
AND pm.meta_value IN (1207)) + SUM(pm.meta_key = 'property_city'
AND pm.meta_value IN (1237)) = 3) pm ON p.id = pm.property_id
WHERE
LOWER(p.title) LIKE CONCAT('%%')
AND p.deleted = 0
GROUP BY p.id
| id |
| -: |
| 1 |
| 2 |
SELECT
`property_id`
FROM
property_meta pm
GROUP BY `property_id`
HAVING SUM(pm.meta_key = 'property_area' AND pm.meta_value IN (1208)) +
SUM(pm.meta_key = 'property_region' AND pm.meta_value IN (1207)) +
SUM(pm.meta_key = 'property_city' AND pm.meta_value IN (1237)) = 3
| property_id |
| ----------: |
| 1 |
| 2 |
дБ <> скрипка здесь