两表联合查询去掉重复记录——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]