Python's Archiver

為方便港臺同胞閱覽,Python中國特別推出簡繁體內容轉換功能

xieaotian 发表于 2008-11-9 21:54

两表联合查询去掉重复记录——concat的用法(MySQL)

例如:

车的名称虽然不同,但是有可能型号相同。

A表:
mysql> select * from A;
+----+----------+----------+
| Id | car_name | car_type |
+----+----------+----------+
|    1 | 奥迪       | A6         |
|    2 | 奥迪       | A8         |
|    3 | 中华       | A8         |
|    4 | 宝马       | X5         |
+----+----------+----------+

B表:
mysql> select * from B;
+----+----------+----------+
| Id | car_name | car_type |
+----+----------+----------+
|    1 | 奥迪       | A6         |
|    2 | 奥迪       | A6         |
|    3 | 奥迪       | A6         |
|    4 | 宝马       | X5         |
|    5 | 宝马       | X5         |
+----+----------+----------+

语句如下:
select * from A where concat(car_name,car_type) not in(select distinct concat(car_name,car_type) from B);

查询结果如下:
+----+----------+----------+
| Id | car_name | car_type |
+----+----------+----------+
|    2 | 奥迪       | A8         |
|    3 | 中华       | A8         |
+----+----------+----------+

这样就查询出 A表中车型 不在 B表中 的记录。

其中主要是MySQL中concat的用法,方法如下:
mysql> SELECT CONCAT('My', 'S', 'QL');
+-------------------------+
| CONCAT('My', 'S', 'QL') |
+-------------------------+
| MySQL                     |
+-------------------------+

执行结果是'MySQL',也就是它所起到的是连接作用。
# CONCAT(str1,str2,...)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)

mysql> SELECT CONCAT(1+2,'test');
+--------------------+
| CONCAT(1+2,'test') |
+--------------------+
| 3test                |
+--------------------+
1 row in set (0.00 sec)
执行了1+2,结果为3test。

mysql> SELECT CONCAT('My', NULL, 'QL');
+--------------------------+
| CONCAT('My', NULL, 'QL') |
+--------------------------+
| NULL                       |
+--------------------------+
结果为Null。

以上操作为MySQL5.1下执行。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.