【问题标题】:MySQL- how to get data from 3 table?MySQL-如何从 3 个表中获取数据?
【发布时间】:2013-08-23 13:52:17
【问题描述】:

我需要一个基于 3 个表从 1 个表中检索数据的查询:

表1

UID | GID
1 | 0
2 | 1
3 | 1
4 | 2

表2

CID |用户识别码
1 | 2
2 | 3
3 | 4
4 | 5

表3

盖子 |来电
1 | 2
2 | 2
3 | 3
4 | 1

现在我需要从 table3 中检索数据,其中 table1.GID=1 和 table2.UID=table1.UID 和 table3.CID=table2.CID

【问题讨论】:

  • 您熟悉 SQL 中的 JOIN 吗?

标签: mysql sql


【解决方案1】:

除非我打错了

SELECT 
    t3.*
FROM
    t3
        LEFT JOIN
    t2 ON t3.cid = t2.cid
        LEFT JOIN
    t1 ON t2.uid = t1.uid
WHERE
    t1.gid = 1;

有表格:

CREATE TABLE IF NOT EXISTS `t1` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `gid` int(11) NOT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `t1` (`uid`, `gid`) VALUES
(1, 0),
(2, 1),
(3, 1),
(4, 2);

CREATE TABLE IF NOT EXISTS `t2` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;


INSERT INTO `t2` (`cid`, `uid`) VALUES
(1, 2),
(2, 3),
(3, 4),
(4, 5);

CREATE TABLE IF NOT EXISTS `t3` (
  `lid` int(11) NOT NULL AUTO_INCREMENT,
  `cid` int(11) NOT NULL,
  PRIMARY KEY (`lid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `t3` (`lid`, `cid`) VALUES
(1, 2),
(2, 2),
(3, 3),
(4, 1);

【讨论】:

    【解决方案2】:

    你可以用这个:

    SELECT Table3.* FROM Table1 LEFT JOIN (Table2, Table3) 
    ON (table1.GID=1 and table2.UID=table1.UID and table3.CID=table2.CID)
    

    【讨论】:

      【解决方案3】:
      SELECT table3.*
      FROM table1
      INNER JOIN table2 ON (table1.UID = table2.UID)
      INNER JOIN table3 ON (table3.CID = table2.CID)
      WHERE table1.GID = 1
      

      【讨论】:

      • 为什么是INNER 而不是LEFT
      • @IanMcLaird 因为我们要加入table3 并且肯定想要来自那里的数据。
      【解决方案4】:

      你可以使用这个查询

      SELECT table3.* 
      FROM table1 
      JOIN table2 
      JOIN table3 
      WHERE table1.GID=1 
      and table2.UID=table1.UID 
      and table3.CID=table2.CID
      

      【讨论】:

      • 请不要给出宣传非 ANSI 连接模式的答案。
      猜你喜欢
      • 2023-04-03
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 2016-01-07
      相关资源
      最近更新 更多