如何找到在如表中如何可以找到所有的<strong><em>不同的值,其在数据列</em></strong></p> <p>的第一个字母为如开头所示声明的MySQL
CREATE TABLE table1 (`id` int not null auto_increment primary key, `data` char(3),`subject` varchar(250)) ;
INSERT INTO table1
(`id`, `data`,`subject`)
VALUES
(1, 'xa','aad'),
(2, 'ya','aac'),
(3, 'yc','aae'),
(4, 'zb','aaf'),
(5, 'yb','aag'),
(6, 'xc','aah'),
(7, 'za','aai');
鲜明通配符:如何找到在如表中如何可以找到所有的<span><em>不同的值,其在数据列</em></span></p> <p>的第一个字母为如开头所示声明的MySQL
select * from table1 where data like '%x%' limit 1; select * from table1 where data like '%y%' limit 1;
select * from table1 where data like '%z%' limit 1;
成一个单一的查询和得到如下的输出如下所示
输出
1, 'xa', 'aad' 2, 'ya','aac'
3, 'zb','aaf'
sql fiddle
回答:
组合DISTINCT
和LEFT
?但不要忘记,这种方法并不使用索引。
SELECT distinct(LEFT(`data`, 1)) first_letter, id, `data`, subject FROM table1
GROUP BY first_letter
http://sqlfiddle.com/#!9/08235/5/0
回答:
使用UNION
:
(select * from table1 where data like '%x%' limit 1) UNION ALL
(select * from table1 where data like '%y%' limit 1)
UNION ALL
(select * from table1 where data like '%z%' limit 1) ;
updated fiddle
需要注意的是:你必须以限制工作对于每个查询附上每个查询在()
,其他明智的你将只有一行而不是三行。
另请注意,'%z%'
会为您提供那些包含z
的值,不仅包含第一个字符的任何位置。您需要使用LEFT(data, 1) = 'z'
代替:
(select * from table1 where LEFT(data, 1) = 'x' limit 1) UNION ALL
(select * from table1 where LEFT(data, 1) = 'y' limit 1)
UNION ALL
(select * from table1 where LEFT(data, 1) = 'z' limit 1)
updated fiddle 2
回答:
使其成为单一的查询
select id,
data,
LEFT(group_concat(subject order by id),LOCATE(',',group_concat(subject order by id)) - 1),
from table1
group by SUBSTRING(data, 1, 1)
回答:
您可以使用子查询来获得第一id
每组
SELECT * FROM table1
WHERE id IN (
select min(id) from table1
where data like '%x%'
OR data like '%y%'
OR data like '%z%'
GROUP BY left(data, 1)
)
Fiddle。
以上是 如何找到在如表中如何可以找到所有的<strong><em>不同的值,其在数据列</em></strong></p> <p>的第一个字母为如开头所示声明的MySQL 的全部内容, 来源链接: utcz.com/qa/264503.html