我有两个表,listing和listing_data。
列表表
** listing_id | some_field | some_other_field **
** 1 | value | value **
** 2 | value | value **
** 3 | value | value **
** 4 | value | value **
列出数据
** data_id | listing_id | field_name | field_value **
** 1 | 1 | value | 1 **
** 2 | 1 | other | 3 **
** 3 | 2 | value | 5 **
** 4 | 3 | value | 6 **
** 5 | 3 | other | 7 **
** 6 | 3 | value | 6 **
我需要查询该表,以便可以从listings和listing_data表中获取所有字段,以及满足列表数据表上特定条件的值。
即。其中listing_data.field_name='value'AND listing_data.field_value BETWEEN'1'AND'3'AND listg_data.field-name='other'AND listting_data.field_value BETWEEN'3'AND'4'
现在我有:
SELECT l . * , d . *
FROM listings l
JOIN listing_data d ON d.listing_id = l.listing_id
WHERE (
d.field_name = 'val1'
AND field_value
BETWEEN 1
AND 1
)
OR (
d.field_name = 'val2'
AND field_value
BETWEEN 3
AND 4
)
这是有效的,但只返回val1、val2字段值。这些只是为了搜索,但我实际上需要所有字段值(如val3、val4等)。此外,搜索需要是AND而不是OR,因为我只想要符合所有搜索条件的结果。将此语句中的OR更改为AND不会返回任何结果。我知道这是因为您无法匹配两个不同的字段名称(字段名称不能等于val1和val2)
您将列表的表别名指定为l
-您需要将其作为别名而不是原始名称:
SELECT l.*, i.*
FROM listings l, listing_images i
-- ...
select listings.*, listing_images.*
from listings l
inner join listing_images i
on i.listing_id = l.listing_id
inner join listing_data d
on d.listing_id = l.listing_id
where (d.field_name = 'val1'
and field_value between 1 and 2) or
(d.field_name = 'val2' and
field_value between 3 and 4)
我还将你的WHERE子句固定为我认为你想要的内容。按照你的方式,它不会返回任何记录。