商品表 goods 有学校字段 school_ids
学校字段 school_ids 中保存学校表 school 的id,如果商品包含多个学校则多个id使用逗号分隔保存
school:
goods:
最终查询:两个表关联,goods表中字段中school_ids 逗号隔开和school表中的id关联
MySQL版:
SELECT g.id,g.school_ids,GROUP_CONCAT(s.locality_name)
FROM goods g LEFT JOIN school s ON FIND_IN_SET(s.id , g.school_ids)
GROUP BY g.id
ORDER BY g.id ASC
运行结果

解释:
concat_ws()函数
该函数将分组中的非NULL值串联起来称为一个字符串。如果分组中的某个值为NULL,而串联的结果为NULL。
自己理解:将多个字符串连接成一个字符串,中间用逗号隔开
语法GROUP_CONCAT(expr)
例子:

FIND_IN_SET函数
语法:FIND_IN_SET(str,strlist)
- 假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在1到N之间。
- 一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。
- 如果第一个参数是一个常数字符串,而第二个是typeSET列,则FIND_IN_SET()函数被优化,使用比特计算。
- 如果str不在strlist或strlist为空字符串,则返回值为0。
- 如任意一个参数为NULL,则返回值为NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
strlist:一个由英文逗号“,”链接的字符串,例如:“a,b,c,d”,该字符串形式上类似于SET类型的值被逗号给链接起来。
示例:SELECT FIND_IN_SET(‘b’,‘a,b,c,d’); //返回值为2,即第2个值
个人理解:比如一个字段中信息用逗号隔开,在关联表时,他可以拆分逗号一个一个去和被关联表的字段比较
PostgreSQL版:
SELECT g.id,g.school_ids,string_agg(s.locality_name,',')
FROM goods g LEFT JOIN school s ON s.id = ANY(STRING_TO_ARRAY(g.school_ids, ','))
GROUP BY g.id,g.school_ids
ORDER BY g.id ASC
解释
string_agg函数
语法string_agg(字段,',')
定义和上面的mysql相似concat_ws
ANY函数
语法:ANY(STRING_TO_ARRAY(字段, ','))
定义和上面的mysql相似FIND_IN_SET
商品表 goods 有学校字段 school_ids学校字段 school_ids 中保存学校表 school 的id,如果商品包含多个学校则多个id使用逗号分隔保存school:goods:最终查询:两个表关联,goods表中字段中school_ids 逗号隔开和school表中的id关联MySQL版:SELECT g.id,g.school_ids,GROUP_CONCAT(s...
select account_id,
substring_index(substring_index(a.related_shop_ids,','
,b.help_topic_id+1),',',-1) shopid
sales_hang_account a
mysql.help_topic b
on b.help_topic_id < (length(a.related_shop_ids) - length(replace(a.related_shop_ids,',',''))+1
下面两个函数的使用和FIND_IN_SET一样,使用时只需要把FIND_IN_SET换成FIND_PART_IN_SET或FIND_ALL_PART_IN_SET
例如某
字段里是为1,2,3,4,5
使用方法:
第一种,传入1,3,6 可以查出来
select * from XXX where FIND_PART_IN_SET('1,3,6','1,2,3,4,5')
第二种,传入1,3,6 查不出来
select * from XXX where FIND_ALL_PART_IN_SET('1,3,6','1,2,3,4,5')
第一种:只要包含其中一个就可以被查出来
Bluemix
提供了MySQL和PostgreSQL的数据库服务,用户可以直接调用数据库,带来了使用上的便利,但用户目前在
Bluemix上无法作为管理员直接管理数据库。本文主要介绍如何在Bluemix的云平台上管理您的数据库。Bluemix并没有提供一个方案用来在线管理您创建的数据库,如MySQL,PostgreSQL
等。当用户在Bluemix上创建了数据库,我们需要一个解决方案去在线管理数据库。本文
select a.title,captionSign,GROUP_CONCAT(c.`name`) as 'aa'
from article a
join caption c on FIND_IN_SET(c.id,a.captionSign)
group by a.id;
注意:group by a.id;
GROUP_CONCAT()这...
把逗号拼接的id做拆分做一张临时表出来
select a.ID, substring_index(substring_index(a.users, ',', b.help_topic_id + 1), ',', -1) users
from `order` a join
mysql.he.
关于mysql一个字段存储,多条规则数据需要分割的查询,或者查询插入的写法
SELECT a.id, IFNULL(SUBSTRING_INDEX(SUBSTRING_INDEX(a.[需要分割列名],',',helpTopic.help_topic_id+1),[分割字符,比如:,],-1),'') FROM [TABLE_NAME] a
left join mysql.help_topic helpTopic
on helpTopic.help_topic_id < (LENGTH(a.[需要分割
inner join(等值连接) : 只返回两个表中联结字段相等的记录
left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录
INNER JOIN 语法:
INNER JOIN 连接两个数据表的用法:
SELECT * FROM 表1 INNER JO
在 PostgreSQL 中,LEFT JOIN、RIGHT JOIN 和 INNER JOIN 是不同类型的表连接操作,它们之间的区别如下:
1. INNER JOIN:内连接是最常见的表连接类型。它返回两个表中满足连接条件的行。只有在连接条件成立时,两个表中的行才会被合并到结果集中。如果没有匹配的行,则不会包含在结果中。
2. LEFT JOIN:左连接返回左边表中的所有行,以及与右边表匹配的行,如果没有匹配的行,则右边表的列将包含 NULL 值。左连接关键字是 `LEFT JOIN` 或 `LEFT OUTER JOIN`。
3. RIGHT JOIN:右连接返回右边表中的所有行,以及与左边表匹配的行,如果没有匹配的行,则左边表的列将包含 NULL 值。右连接关键字是 `RIGHT JOIN` 或 `RIGHT OUTER JOIN`。
简而言之,INNER JOIN 仅返回两个表中匹配的行,LEFT JOIN 返回左表中的所有行以及与右表匹配的行,RIGHT JOIN 返回右表中的所有行以及与左表匹配的行。
以下是一个示例,展示了这三种连接类型之间的区别。假设你有两个表:`orders` 和 `customers`。
orders 表:
| order_id | customer_id |
|----------|-------------|
| 1 | 101 |
| 2 | 102 |
| 3 | 103 |
customers 表:
| customer_id | customer_name |
|-------------|---------------|
| 101 | John |
| 103 | Sarah |
| 104 | Emma |
使用以下查询来进行不同类型的连接操作:
1. INNER JOIN:
```sql
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
| order_id | customer_name |
|----------|---------------|
| 1 | John |
| 3 | Sarah |
2. LEFT JOIN:
```sql
SELECT orders.order_id, customers.customer_name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;
| order_id | customer_name |
|----------|---------------|
| 1 | John |
| 2 | NULL |
| 3 | Sarah |
3. RIGHT JOIN:
```sql
SELECT orders.order_id, customers.customer_name
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.customer_id;
| order_id | customer_name |
|----------|---------------|
| 1 | John |
| 3 | Sarah |
| NULL | Emma |
希望这个示例能够帮助你理解 LEFT JOIN、RIGHT JOIN 和 INNER JOIN 之间的区别。