当第二个为空时,如何在一个查询中选择两个表(更难,不是订单任务)

时间:2015-03-15 19:03:38

标签: php sql mysqli

我在MySQL中有两个表:t1和t2。 结构是这样的:

t1.aa    t2.az
t1.bb    t2.zz
t1.cc    t2.aa
         t2.dz

现在,我需要得到类似的东西:

result: t1.aa = 'value', t2.dz = 'value';

BUT:

1)第二个表(t2)可能只是空的

2)在我的查询" WHERE"声明如下:

WHERE t1.aa=t2.aa AND t2.zz=345

所以,如果第二个表真的是空的,我需要得到这样的东西:

result: t1.aa = 'value', t2.dz = null;

感谢。

P.S。我们还有其他答案,例如Select multiple tables when one table is empty in MySQL,但问题出在" WHERE"声明..

我的表是:

表t1

CREATE TABLE IF NOT EXISTS `t1` (
  `aa` int(5) NOT NULL AUTO_INCREMENT,
  `bb` varchar(56) NOT NULL,
  `cc` varchar(56) NOT NULL,
  PRIMARY KEY (`aa`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

表t1数据

INSERT INTO `t1` (`aa`, `bb`, `cc`) VALUES
(1, 'varchar in bb', 'cc varchar');

表t2

CREATE TABLE IF NOT EXISTS `t2` (
  `az` int(5) NOT NULL AUTO_INCREMENT,
  `zz` int(5) NOT NULL,
  `aa` int(5) NOT NULL,
  `dz` int(10) NOT NULL,
  PRIMARY KEY (`az`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

表t2数据为空

2 个答案:

答案 0 :(得分:2)

我不是天才,但我读了mysql documentacion

http://dev.mysql.com/doc/#manual

使用JOIN(我没有测试它)你需要证明它。

SELECT * FROM t1 LEFT JOIN t2 ON t1.aa == t2.aa WHERE t2.zz = 345 

答案 1 :(得分:0)

Lea Tano,我们很接近。

正确的查询是:

SELECT * FROM t1 LEFT JOIN t2 ON t1.aa=t2.aa AND zz=345

正如您所看到的,没有必要在" WHERE"声明。此角色由" ON ... AND ..."。

继承

感谢所有人的帮助。

Lea Tano,主要是。