数据库两张表 其中一张存了另一张的多个id以逗号拼接 如何查询
时间: 2024-09-27 07:03:44 浏览: 31
如果你有一个数据库表格A,其中包含另一个表格B的ID列表,通常是作为字符串以逗号分隔存储,比如`ids_column`字段,要查询这两个表格关联的数据,可以采取以下步骤:
1. 首先,你需要将`ids_column`字段分解成一个个独立的ID。这通常通过SQL函数`STRING_SPLIT()`(如果数据库支持)或程序语言如Python、SQL Server的`STRING_SPLIT`函数,或者MySQL的`FIND_IN_SET()`等来完成。
例如,在SQL Server中,你可以这样做:
```sql
SELECT A.*, B.*
FROM A
CROSS APPLY STRING_SPLIT(A.ids_column, ',') AS id_list
OUTER APPLY (SELECT * FROM B WHERE B.id = id_list.value) AS B_data
```
在MySQL中:
```sql
SELECT A.*, B.*
FROM A
LEFT JOIN (
SELECT SPLIT_STR(A.ids_column, ',', numbers.n) as id
FROM A, TABLE(SUBSTRING_INDEX(',', A.ids_column, REPEAT(1, LENGTH(A.ids_column))) AS numbers
) AS B_ids
ON B_ids.id = B.id
JOIN B ON B.id = B_ids.id;
```
2. 然后,你可以使用这些单独的ID去B表中查询数据,通过联接操作获取A表和B表匹配的记录。
**相关问题--:**
1. 如果表格A的`ids_column`为空或不存在,上述查询会怎样?
2. 如果B表中有大量的记录,这种方法效率如何?有没有优化建议?
3. 在其他数据库系统中(如PostgreSQL),如何处理这种字符串ID的情况?
阅读全文