MySQL 单个 table 子查询
MySQL single table subquery
我有一个问题,我希望使用 col5=2206
获取 table 中的所有行,然后使用 select 包含 col2 和 col3 的所有其他行包含相同的 col2 组合col3 与 col5 相同(例如,在下面的示例中,col2=2、col3=6)
我还希望将返回的行过滤为 col5 (fi.col5=4000) 中具有特定值的行。
('101', '2', '6', '2009-12-31', '2206', 'Exempt', '0', '0', '0', '4', '5'),
('102', '2', '6', '2009-12-31', '4000', 'Exempt', '-1', '0', '0', '4', '5'),
('103', '2', '6', '2009-12-31', '1200', '', '1', '0', '0', '4', '5');
我试过各种子查询语句。但是无法像在一个 table 上那样工作。这是可能的还是我需要创建一个更大的脚本。
我宁愿建议您使用后端代码而不是 SQL 来执行此操作,因为它可能会给您带来性能问题。
您使用自联接来实现您想要的。
Select t2.*
From table t1
Join table t2 on ( t2.col2 = t1.col2 and t2.col3 = t1.col3 )
Where t1.col5 = '2206'
And t2.col5 <> '2206' -- replace that with specific filters like t2.col5 = '4000'
;
你最好使用 JOINS,但你需要子查询,那么你可以试试这个:
select a.* from table a where
a.col2 in (select col2 from table where col5=a.col5)
and
a.col3 in (select col3 from table where col5=a.col5)
and a.col5=4000;
我有一个问题,我希望使用 col5=2206
获取 table 中的所有行,然后使用 select 包含 col2 和 col3 的所有其他行包含相同的 col2 组合col3 与 col5 相同(例如,在下面的示例中,col2=2、col3=6)
我还希望将返回的行过滤为 col5 (fi.col5=4000) 中具有特定值的行。
('101', '2', '6', '2009-12-31', '2206', 'Exempt', '0', '0', '0', '4', '5'),
('102', '2', '6', '2009-12-31', '4000', 'Exempt', '-1', '0', '0', '4', '5'),
('103', '2', '6', '2009-12-31', '1200', '', '1', '0', '0', '4', '5');
我试过各种子查询语句。但是无法像在一个 table 上那样工作。这是可能的还是我需要创建一个更大的脚本。
我宁愿建议您使用后端代码而不是 SQL 来执行此操作,因为它可能会给您带来性能问题。
您使用自联接来实现您想要的。
Select t2.*
From table t1
Join table t2 on ( t2.col2 = t1.col2 and t2.col3 = t1.col3 )
Where t1.col5 = '2206'
And t2.col5 <> '2206' -- replace that with specific filters like t2.col5 = '4000'
;
你最好使用 JOINS,但你需要子查询,那么你可以试试这个:
select a.* from table a where
a.col2 in (select col2 from table where col5=a.col5)
and
a.col3 in (select col3 from table where col5=a.col5)
and a.col5=4000;