我有两个表,如下所示:
+----+----------------+-----------+-----+
| id | Catalog Number | Pack Size | Qty |
+----+----------------+-----------+-----+
| 1 | K353-J353-5 | 5 kg | 3 |
| 2 | V3532-3 | 3 kg | 2 |
| 3 | S32-366-10 | 10 kg | 1 |
+----+----------------+-----------+-----+
+----+----------------+--------------+
| id | Catalog Number | Product Name |
+----+----------------+--------------+
| 1 | V353-J353 | a |
| 2 | V3532 | b |
+----+----------------+--------------+
我想加入这两个表,但不同的目录号格式给我带来了麻烦。目录号始终用“ - ”字符分隔,但可以有0或1“ - ”。
我管理的唯一方法是通过Excel的文本到列函数,SQL中是否有相同的方法?
提前致谢, 麦克
答案 0 :(得分:1)
当你JOIN
表时,在ON
子句中使用MySQL函数是有效的:
SELECT * FROM
Table1
JOIN Table2
ON REPLACE(Table1.catalog_number, "-", "") = REPLACE(Table2.catalog_number, "-", "")
这将按目录编号V35323和V3532-3连接列,但不按V3532和V3532-3的目录编号连接。根据问题本身,这应该解决问题。在查看数据时,我不太确定。
修改的
您的问题没有具体说明,但我认为您要忽略第一个表中的最后一组数字,并将其与第二个表中未更改的目录号相匹配。如果这是真的,那么这将起作用:
SELECT * FROM
Table1
JOIN Table2
ON
REPLACE( SUBSTR(Table1.catalog_number, 1, LENGTH(Table1.catalog_number) - LENGTH(SUBSTRING_INDEX(Table1.catalog_number, "-", -1)) - 1), "-", "")
=
Table2.catalog_number;
这是一个疯狂的复杂,但它的确如此:
mysql> SELECT * FROM
-> Table1
-> JOIN Table2
-> ON
-> REPLACE( SUBSTR(Table1.catalog_number, 1, LENGTH(Table1.catalog_number) - LENGTH(SUBSTRING_INDEX(Table1.catalog_number, "-", -1)) - 1), "-", "")
-> =
-> Table2.catalog_number;
+----+----------------+-----------+------+----+----------------+--------------+
| id | catalog_number | pack_size | qty | id | catalog_number | product_name |
+----+----------------+-----------+------+----+----------------+--------------+
| 2 | V3532-3 | 3 kg | 2 | 2 | V3532 | b |
+----+----------------+-----------+------+----+----------------+--------------+
1 row in set (0.02 sec)
答案 1 :(得分:0)
尝试:
SELECT *
FROM Table1
JOIN Table2 ON Table2.`Catalog Number` LIKE CONCAT(Table1.Catalog Number, '%')