› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
stevenbipt
V2EX  ›  MySQL

mysql 数据库怎么对同一个表进行笛卡儿积

  •  
  •   stevenbipt · Jun 7, 2018 · 4460 views
    This topic created in 3043 days ago, the information mentioned may be changed or developed.

    需要查询一个数据库中同一个人干了不同的两个事,比如:开运动会时一个人同时参加了 400 米和 800 米项目,怎么把这个人查询出来(即同时参加了 400 米和 800 米的人名),刚学 MYSQL 碰到了这个问题,个人想的是做笛卡儿积然后使名字相同,第一个项目为 400 米,第二个项目为 800 米,但是这样查不出来。

    10 replies  •  2018-06-08 09:19:00 +08:00
    yangqi
        1
    yangqi  
       Jun 7, 2018   ❤️ 1
    表结构不说?看看 group by
    stevenbipt
        2
    stevenbipt  
    OP
       Jun 7, 2018
    字段名 数据类型 含义
    1 sNo char(5) 运动员编号
    2 eNo tinyint unsigned 项目编号
    3 result varchar(50) 成绩
    4 ranking tinyint unsigned 名次
    5 score tinyint unsigned 分数
    查询同时参加项目 5 和项目 6 的运动员编号。
    @yangqi
    zhzsh
        3
    zhzsh  
       Jun 7, 2018 via Android   ❤️ 1
    select sno, count(1) cnt from table where eno in (5,6) group by sno having cnt=2 这样可以吗
    stevenbipt
        4
    stevenbipt  
    OP
       Jun 7, 2018
    @zhzsh 成功了但是原理是什么呢?
    zhzsh
        5
    zhzsh  
       Jun 7, 2018 via Android   ❤️ 1
    @stevenbipt 先用 where 过滤掉非 5 或 6 的项目然后 groupby 运动员算过滤后每个人参加的项目数然后再选出项目数=2 的运动员 也就是参加了 5 和 6 两项
    yangqi
        6
    yangqi  
       Jun 7, 2018   ❤️ 1
    是要查询所有参加了多个项目的人?如果是的话
    select from group by sNo having count(eNo) > 1
    stevenbipt
        7
    stevenbipt  
    OP
       Jun 7, 2018
    @yangqi 不是,就是参加了指定的两个项目(项目 5 和项目 6 的人)
    yangqi
        8
    yangqi  
       Jun 7, 2018   ❤️ 1
    @stevenbipt #7 那就加个 where 就行了,反正就是用 group by having count()
    msg7086
        9
    msg7086  
       Jun 8, 2018   ❤️ 1
    XY 问题。
    原题是从一张表中查出两条记录(也就是 WHERE eNo in (5, 6))。
    然后判断一个人是否同时有这两条数据(也就是 GROUP BY sNo HAVING COUNT(eNo) = 2 )。
    tradzero
        10
    tradzero  
       Jun 8, 2018 via Android
    union all
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2648 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 04:06 · PVG 12:06 · LAX 21:06 · JFK 00:06
    ♥ Do have faith in what you're doing.