MySQL - 一個欄位儲存多個ID時的查詢
一、說明
三、查詢
當在一張表的某個欄位中儲存了另外一張表的多個ID時常用查詢
二、準備
假設有一部落格,每一個主題允許有多個類別。資料庫設計時建了類別和主題兩張表,主題對類別的關聯設定在主題表中。
-- 類別表DDL
CREATE TABLE `T_CATEGORYS` (
`C_ID` int(11) NOT NULL,
`C_NAME` varchar(255) NOT NULL,
PRIMARY KEY (`C_ID`)
)
-- 主題表DDL
CREATE TABLE `T_TOPIC` (
`T_ID` int(11) NOT NULL,
`T_NAME` varchar(255) NOT NULL,
`T_CATEGORYS` varchar(128) NOT NULL,
PRIMARY KEY (`T_ID`)
)
-- 準備類別資料
INSERT INTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('1', 'Struts');
INSERT INTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('2', 'Spring');
INSERT INTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('3', 'iBatis');
INSERT INTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('4', 'Hibernate');
-- 準備主題資料
INSERT INTO `xilen_dev`.`T_TOPIC` (`T_ID`, `T_NAME`, `T_CATEGORYS`) VALUES ('1', 'SSI整合示例', '1,2,3');
INSERT INTO `xilen_dev`.`T_TOPIC` (`T_ID`, `T_NAME`, `T_CATEGORYS`) VALUES ('2', 'SSH整合示例', '1,2,4');
三、查詢
1、查詢多ID的欄位中包含某個ID的記錄
SQL:
-- 查詢類別包含了iBatis(id=3)的主題記錄
SELECT * FROM T_TOPIC WHERE FIND_IN_SET(3, T_CATEGORYS)
結果:
2、查詢多ID欄位中這些ID所代表的記錄
SQL:
-- 查詢主題 SSH整合示例(id=2) 包含的類別記錄
SELECT * FROM T_CATEGORY c WHERE (SELECT FIND_IN_SET(c.C_ID,t.T_CATEGORYS) from T_TOPIC t where t.T_ID=2)
結果:
3、查詢時將多ID的欄位的ID轉換為對應的標識
SQL:
-- 查詢主題表時將類別的ID轉換為類別的NAME
SELECT t.T_ID AS topicId,
(SELECT GROUP_CONCAT(c.C_NAME) FROM T_CATEGORY c WHERE FIND_IN_SET(c.C_ID,t.T_CATEGORYS)) AS categoryName
FROM T_TOPIC t
結果:
4、補充
FIND_IN_SET函式預設是以符號 , 作為分割符的,如果多ID欄位使用的不是這個預設的分隔符,而是以如 | 的符號作為分隔符,那麼:
-- 非 , 作為分隔符時,先REPLACE函式替換它
SELECT * FROM T_TOPIC WHERE FIND_IN_SET(3, REPLACE(T_CATEGORYS,'|',','))
相關文章
- mysql sql同一個欄位多個行轉成一個欄位查詢MySql
- 同一欄位多個查詢條件時遇到的一個問題
- mysql基礎 依據一個欄位查詢另外一個欄位存在不同的值MySql
- 多個值以,分隔儲存在一個欄位精確匹配查詢 sql語句SQL
- mysql正則匹配解決查詢一個欄位是否在另一個欄位中MySql
- MySQL資料庫查詢多個欄位值全部相同的記錄MySql資料庫
- 查詢/刪除重複的資料(單個欄位和多個欄位條件)
- MySQL查詢某個欄位含有字母數字的值MySql
- 查詢某個欄位的不同值
- 在 SAP MM 物料顯示介面上看到一個欄位,如何查詢哪張資料庫表的哪個欄位進行的儲存資料庫
- 在 with 查詢中只查詢個別欄位
- mysql多表多欄位查詢並去重MySql
- sqlserver查詢一個庫所有表的欄位名及欄位型別SQLServer型別
- [Mysql 查詢語句]——查詢欄位MySql
- MySQL如何查詢某個欄位含有字母數字的值MySql
- sql根據多個欄位查詢重複記錄SQL
- MySQL簡單實現多欄位模糊查詢MySql
- 同一張表的兩個欄位比較查詢
- mySql刪除多個表 刪除多個欄位的SQLMySql
- lucene 多欄位查詢-MultiFieldQueryParser
- Laravel 一條 SQL 如何 count 多個欄位,Laravel 一條 sql 查詢每個分類的數量LaravelSQL
- MySql Order By 多個欄位 排序規則MySql排序
- mysql 用sql語句查詢一個表中的所有欄位型別、註釋MySql型別
- Elasticsearch 單字串多欄位查詢Elasticsearch字串
- Sql查詢 一個表中某欄位的資料在另一個表中某欄位中不存在的SQL
- Elasticsearch 複合查詢——多字串多欄位查詢Elasticsearch字串
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- 一文詳解MySQL如何同時自增自減多個欄位MySql
- 如何查詢 SAPGUI 螢幕上某個欄位對應的資料庫表儲存的試讀版GUI資料庫
- 更新大表中某個欄位的儲存過程儲存過程
- 【MySql】mysql 欄位個數的限制MySql
- Lucene多欄位查詢&高亮顯示
- 查詢、刪除多個欄位相同的記錄
- 如何查詢一個儲存過程是否在執行儲存過程
- [MySQL] - 聯表查詢,查詢一個不在另一個表的記錄MySql
- fastadmin中快速搜尋時執行查詢的欄位 預設查詢idAST
- MySQL:查詢欄位數量多少對查詢效率的影響MySql
- 如何在Spring Data MongoDB 中儲存和查詢動態欄位SpringMongoDB