1. 程式人生 > >一個欄位儲存多個ID時的查詢

一個欄位儲存多個ID時的查詢

一、說明

    當在一張表的某個欄位中儲存了另外一張表的多個ID時常用查詢

二、準備

    假設有一部落格,每一個主題允許有多個類別。資料庫設計時建了類別和主題兩張表,主題對類別的關聯設定在主題表中。

  1. -- 類別表DDL
  2. CREATETABLE `T_CATEGORYS` (  
  3.   `C_ID` int(11) NOTNULL,  
  4.   `C_NAME` varchar(255) NOTNULL,  
  5.   PRIMARYKEY (`C_ID`)  
  6. )   
  1. -- 主題表DDL
  2. CREATETABLE `T_TOPIC` (  
  3.   `T_ID` int(11) NOT
    NULL,  
  4.   `T_NAME` varchar(255) NOTNULL,  
  5.   `T_CATEGORYS` varchar(128) NOTNULL,  
  6.   PRIMARYKEY (`T_ID`)  
  7. )  
  1. -- 準備類別資料
  2. INSERTINTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('1''Struts');  
  3. INSERTINTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('2''Spring');  
  4. INSERTINTO `T_CATEGORY` (`C_ID`, `C_NAME`) 
    VALUES ('3''iBatis');  
  5. INSERTINTO `T_CATEGORY` (`C_ID`, `C_NAME`) VALUES ('4''Hibernate');  
  1. -- 準備主題資料
  2. INSERTINTO `xilen_dev`.`T_TOPIC` (`T_ID`, `T_NAME`, `T_CATEGORYS`) VALUES ('1''SSI整合示例''1,2,3');  
  3. INSERTINTO `xilen_dev`.`T_TOPIC` (`T_ID`, `T_NAME`, `T_CATEGORYS`) VALUES ('2''SSH整合示例'
    '1,2,4');  

三、查詢

    1、查詢多ID的欄位中包含某個ID的記錄
        SQL:

  1. -- 查詢類別包含了iBatis(id=3)的主題記錄
  2. SELECT * FROM T_TOPIC WHERE FIND_IN_SET(3, T_CATEGORYS)  
        結果:

            

    2、查詢多ID欄位中這些ID所代表的記錄

        SQL:

  1. -- 查詢主題 SSH整合示例(id=2) 包含的類別記錄
  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:

  1. -- 查詢主題表時將類別的ID轉換為類別的NAME
  2. SELECT t.T_ID AS topicId,   
  3.     (SELECT GROUP_CONCAT(c.C_NAME) FROM T_CATEGORY c WHERE FIND_IN_SET(c.C_ID,t.T_CATEGORYS)) AS categoryName       
  4. FROM T_TOPIC t  
        結果:

            

    4、補充

        FIND_IN_SET函式預設是以符號 , 作為分割符的,如果多ID欄位使用的這個預設的分隔符,而是以如 | 的符號作為分隔符,那麼:

  1. -- 非 , 作為分隔符時,先REPLACE函式替換它
  2. SELECT * FROM T_TOPIC WHERE FIND_IN_SET(3, REPLACE(T_CATEGORYS,'|',','))  

相關推薦

一個儲存ID查詢

一、說明     當在一張表的某個欄位中儲存了另外一張表的多個ID時常用查詢 二、準備     假設有一部落格,每一個主題允許有多個類別。資料庫設計時建了類別和主題兩張表,主題對類別的關

一個儲存圖片或檔案路徑

有時我們表中的一個產品記錄,可能沒有圖片,也可能有一個或多個圖片,怎麼儲存這些資訊呢?難道用10個或更多的欄位來儲存,但大多數行它們都是空的呀,怎麼辦? 利用Windows下檔名中不能用的非法字元,Url中不能用的非法字元,在資料庫中用一個欄位中儲存全部圖片路徑。 (1)

mysql 儲存值 ,判斷一個值是否在其中

表C_file,其中有個欄位是spile,他存的是字元形式,例如:1,2,10,11 C_file ID     spile 1      2,10,11 2      2,3,20,22 3      1,6,8 4      5,6,1,9 SQL:   select

thinkphp5 一個對應模糊查詢

$condition['kname'] = array(array('like','%保健%'), array('like','%護膝%'), array('like','%保健護膝護腰護頸%'), 'or'); 如果是動態的多個條件可以如下: $con

mysql表單一id組成的字串,查詢方法

借鑑:mysql使用instr達到in(字串)的效果 結論:select * from 表名where INSTR(CONCAT(字串),CONCAT(表id)) 問題來源:一表中的某欄位是另一表的外

sql查詢find_in_set,包含ID,並用逗號分開

比如:查詢carouselPicIds輪播圖中包含圖片ID為1的商品則:SELECT * from product where find_in_set('1',carouselPicIds);查詢結果為第一條資料,第二條資料不會被查出來,所以find_in_set方法是以逗號

一個值,同時count出來

一個欄位rvalue有三個值 想用一個sql語句同時輸出三個count值  select date_format(createDate, '%m/%d') datef, count(coupon

tp5同一模糊條件查詢

public function test() { $map['r_name'] = [['like', '普通%'], ['like', '牛逼%'], ['like', '可愛%'], 'or']; $list = Db::table("tp_role")

mysql正則表示式,實現匹配like模糊查詢

現在有這麼一個需求 一個questions表,欄位有題目(TestSubject),選項(AnswerA,AnswerB,AnswerC,AnswerD,AnswerE) 要求欄位不包含png,jpg,jpeg,gif  正常情況下會這麼寫 select * from questions

資料讀取器具有對於儲存過程中的EDM原語或列舉型別無效

報錯程式碼: SqlParameter voteFrom = new SqlParameter("@voteFrom", workFlow.VoteFrom); SqlParameter voteTo = new SqlParameter("@voteTo",

oracle儲存過程將某張表一個值分開成條資料插入到一張新表

create or replace PROCEDURE PRO_MANDATESCOPE (dataid in varchar2,tablename in varchar2 ) AS

mysql查詢:同一個滿足條件的對應

比如查詢patient_id,對應的code_id分別等於1,2,3 select distinct patient_id from qs_patient_code WHERE code_id = 1 or code_id = 3 or code_id = 2

前端 JQuery中獲取一個div下的id

獲取所有的Id值,方法是通過div.class獲取全域性的值,然後再提取具體的Id值 方法一:用for迴圈,因為$("div.class")獲取的是一個數組,通過迴圈讀取出陣列中的每一個元素: var articleIdList = new Array(); var h3=$("div

parttion by ~~~針對某個重複,資料只取前n條。問題例子:1.主評論下的評論按著 時間正序最隻取前5條 2.獲取最新登入記錄......

分組目前已知partition by、group by partition by用於給結果集分組分割槽,如果沒有指定那麼它把整個結果集作為一個分組,最後顯示具體資料 group by:通過所查詢的資料的某一欄位或屬性進行分組,最後顯示組資料,而不是具體資料,因為select 後面的所有列中,沒有使用聚合函

SQL 中拆分由逗號分割的

測試準備建立表並填充資料USE [zws]GO/****** Object:  Table [dbo].[a]    Script Date: 2018/5/3 16:28:28 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER

c語言一個字元變數儲存字元

#include<stdio.h> int main() { char s; char a = 'a'; scanf("%s",&s); printf("input word is:%s, %c\n",&a

hibernate實現查詢某實體的某個值的對應實體列表

在使用hibernate和資料庫互動時,可以是使用hibernate的session的各種操作資料庫方法,在實際使用中也常常結合hbm.xml檔案裡寫好的query執行塊,再通過setParameter方式設定引數後執行查詢獲取結果。其中經常使用的一個場景----hibern

一個FragmentTransaction中進行操作的注意事項

在一個FragmentTransaction中進行多個操作時要注意一些事情: 比如在一個FragmentTransaction中先後執行以下操作: 1. add一個Fragment 2. hide這個Fragment 3. show這個Fragment

【Oracle_SQL】查詢/刪除重複的資料(單個條件)

oracle查詢/刪除重複的資料(單個欄位和多個欄位條件) 單個欄位: --查詢重複的全部資料(單個欄位) 思路: 1.根據欄位tid分組,數量大於1的表示tid欄位有重複的資料; 2.根據1查詢出來

Mysql 一個定義成int型別,查詢傳入String,會擷取字串

表定義: CREATE TABLE `ids` ( id int(11) not null auto_increment, PRIMARY KEY (id) );表中存在一些IDs: 111, 112, 113, 114 等. 查詢: SELECT