我需要加入一个特定的表,但我只想从第二个表中获取具有特定字符出现次数最多的行。
例如 两张桌子 来自 - >的一对多关系B'/ P>
b有一个外键和一个字符串。我只希望b中包含最多'/'字符的行。
select a.*, b.string
from a join b on a.pk = b.fk
通过做类似的事情,我可以得到最高的数字。
MAX(LENGTH(b.string) - LENGTH(REPLACE(b.string, '/', '')))
group by b.fk
但那不是我可以加入的东西。
我尝试使用带有子查询的order by
limit 1
,但我的MySQL版本不支持限制。
答案 0 :(得分:1)
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NULL AUTO_INCREMENT PRIMARY KEY
,string_id INT NOT NULL
,string VARCHAR(12) NOT NULL
,UNIQUE (string_id,string)
);
INSERT INTO my_table (string_id,string) VALUES
(1,'///'),
(1,'////'),
(1,'/////'),
(1,'//'),
(1,'/'),
(2,'/'),
(2,'//'),
(3,'///'),
(3,'//'),
(4,'///'),
(4,'/');
SELECT * FROM my_table;
+----+-----------+--------+
| id | string_id | string |
+----+-----------+--------+
| 5 | 1 | / |
| 4 | 1 | // |
| 1 | 1 | /// |
| 2 | 1 | //// |
| 3 | 1 | ///// |
| 6 | 2 | / |
| 7 | 2 | // |
| 9 | 3 | // |
| 8 | 3 | /// |
| 11 | 4 | / |
| 10 | 4 | /// |
+----+-----------+--------+
SELECT x.*
FROM my_table x
JOIN ( SELECT string_id,MAX(LENGTH(string) - LENGTH(REPLACE(string, '/', ''))) max_string FROM my_table GROUP BY string_id) y
ON y.string_id = x.string_id
AND y.max_string = LENGTH(x.string) - LENGTH(REPLACE(x.string, '/', ''));
+----+-----------+--------+
| id | string_id | string |
+----+-----------+--------+
| 3 | 1 | ///// |
| 7 | 2 | // |
| 8 | 3 | /// |
| 10 | 4 | /// |
+----+-----------+--------+
答案 1 :(得分:0)
您可以尝试使用HAVING子句编写的查询,其中HAVING子句可以指定您需要的表达式
SELECT... FROM... GROUP BY... HAVING MAX(LENGTH(b.string) - LENGTH(REPLACE(b.string,'/','')));