>我有一个表格 1,如下所示(简化版本显示在这里,因为实际版本有超过 60+ 列)
ID | 说明 | From_Index_Code | To_Index_Code | 成本 | 参数1 | 参数2 |
---|---|---|---|---|---|---|
一个 | 东西。 | A001B001 | 500 | ABC. | xyz。 | |
B | 某事2. | B001. | C001 | 1000 | ABC. | xyz。 |
您的问题是,您在子选择中选择id,因此MySQL选择错误,在ids列中添加s可以清除所有内容并获得正确的结果
CREATE TABLE table1 (`id` varchar(1), `Description` varchar(11), `From_Index_Code` varchar(5), `To_Index_Code` varchar(4), `Cost` int, `PARAM1` varchar(4), `PARAM2` varchar(4)) ; INSERT INTO table1 (`id`, `Description`, `From_Index_Code`, `To_Index_Code`, `Cost`, `PARAM1`, `PARAM2`) VALUES ('A', 'Something.', 'A001', 'B001', 500, 'abc.', 'xyz.'), ('B', 'Something2.', 'B001.', 'C001', 1000, 'abc.', 'xyz.') ;
CREATE TABLE table2 (`id` int, `Code` varchar(4), `Value` int) ; INSERT INTO table2 (`id`, `Code`, `Value`) VALUES (1, 'A001', 100.), (2, 'B001', 200.), (3, 'C001', 300.) ;
WITH src_1 as (select s.id,s.description,g.value from table1 s left outer join table2 g on s.from_index_code=g.code), src_2 as (select s.id,s.description,g.value from table1 s left outer join table2 g on s.to_index_code=g.code) select src_1.id, src_1.description,src_1.value as 'from_value',src_2.value as 'to_value' from src_1 ,src_2 where src_1.id=src_2.id
ID | 描述 | from_value | to_value :- |:---------- |---------: |-------: 一 |东西。 | 100 | 200 乙 |某事2.|空| 300
db<>在这里小提琴
嗯。 . .我想你想要这样的加入和条件:
select t1.*
from table1 t1 join
table2 t2f
on t2f.code = t1.From_Index_Code join
table2 t2t
on t2t.code = t1.to_index_code
where t1.param1 = @param1 and t2.param2 = @param2 and
@index_value between t2f.value and t2t.value;
为了提高性能,您需要在table1(param1, param2, from_index_code, to_index_code)
和table2(code)
上建立索引(如果它还不是主键)。