如何找到在如表中如何可以找到所有的<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

回答:

组合DISTINCTLEFT?但不要忘记,这种方法并不使用索引。

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。

以上是 如何找到在如表中如何可以找到所有的&lt;strong&gt;&lt;em&gt;不同的值,其在数据列&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;的第一个字母为如开头所示声明的MySQL 的全部内容, 来源链接: utcz.com/qa/264503.html

回到顶部