zoukankan      html  css  js  c++  java
  • 一个SQL语句的实现

    学生表student

    stuid   name   age

    01      xp      20
    02      pan     12


    学生属性表

    id      stuid          type

    1          01           A
    2          01           b
    3          01           C
    4          02           A
    5          02           C


    如何得到type是既是A、又是B、又是C的学生(即01号学生)。

    依次类推,如何根据客户对type的输入,得到相应的查询记录。比如客户输入A、C就得到既是A又是C的学生(即01和02),客户输入A、B就得既是A、又是B的学生(即01)


    解答:

    --創建測試環境
    Create Table 学生属性表
    (id Int,
     stuid Char(2),
     type Varchar(10))
    --插入數據
    Insert 学生属性表 Select 1,          '01',           'A'
    Union All Select 2,          '01',           'b'
    Union All Select 3,          '01',           'C'
    Union All Select 4,          '02',           'A'
    Union All Select 5,          '02',           'C'
    GO
    --測試
    Declare @type Varchar(1000)
    Select @type = 'A,B,C'
    Select stuid From 学生属性表 Where CharIndex(type, @type) > 0 Group By stuid Having Count(stuid) = Len(@type) - Len(Replace(@type, ',', '')) + 1

    Select @type = 'A,C'
    Select stuid From 学生属性表 Where CharIndex(type, @type) > 0 Group By stuid Having Count(stuid) = Len(@type) - Len(Replace(@type, ',', '')) + 1
    GO
    --刪除測試環境
    Drop Table 学生属性表
    --結果
    /*
    stuid
    01

    stuid
    01
    02
    */

  • 相关阅读:
    dayfunctools.weps 定义函数装饰器
    python3之concurrent.futures一个多线程多进程的直接对接模块,python3.2有线程池了
    python的类的super()
    django的admin
    python的单例模式
    git指南
    django创建验证码
    Django model对象接口
    Go语言基础
    迭代器&迭代对象&生成器
  • 原文地址:https://www.cnblogs.com/xp/p/874212.html
Copyright © 2011-2022 走看看