【问题标题】:SQL with subquery WHERE condition is empty带有子查询的 SQL WHERE 条件为空
【发布时间】:2018-05-28 06:47:25
【问题描述】:

我希望有人可以就问题所在提出建议。

SELECT sms.id FROM sms INNER JOIN screens ON sms.screen_id = screens.id WHERE screens.experience_id = '108';

SELECT id FROM sms
WHERE screen_id IN (SELECT id FROM screens WHERE experience_id = 108 )

...返回一个空行,但有些行应该返回。

澄清一下……

SELECT id FROM sms

... 返回 SMS 中的所有行

SELECT id FROM sms
WHERE screen_id IN (SELECT id FROM screens)

... 返回 SMS 中的所有行和

SELECT id FROM screens WHERE experience_id = 108

... 返回屏幕中具有该 ID 的所有行。

创建表格的 SQL...

    CREATE TABLE IF NOT EXISTS `screens` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `device_id` int(11) NOT NULL,
  `type` varchar(32) NOT NULL,
  `description` text NOT NULL,
  `position` int(11) NOT NULL,
  `experience_id` int(11) NOT NULL,
  `image` varchar(512) NOT NULL,
  `url` varchar(512) NOT NULL,
  `persona_id` int(11) NOT NULL,
  `socialPost` text NOT NULL,
  `socialLinkHeadline` varchar(512) NOT NULL,
  `socialLinkDescription` text NOT NULL,
  `socialLink` varchar(512) NOT NULL,
  `socialAction` varchar(64) NOT NULL,
  `bgcolor` varchar(16) NOT NULL DEFAULT '#fff',
  `created` datetime NOT NULL,
  `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `user_id` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=472 ;


CREATE TABLE IF NOT EXISTS `sms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `source` varchar(16) NOT NULL,
  `content` text NOT NULL,
  `position` int(11) NOT NULL,
  `screen_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;

我运行这些查询以验证的 GIF 动图在这里:https://ibb.co/gzPFsd

我很茫然,可以看到人不能复制,谢谢!

【问题讨论】:

  • 添加一些示例表数据和预期结果 - 作为格式化文本,而不是图像。
  • 也许可以阅读 JOINs
  • 我在帖子中添加了更多有用的信息,谢谢

标签: mysql sql subquery


【解决方案1】:

我不明白您的查询有什么问题,但您也可以使用 join 来做到这一点。

SELECT sms.id FROM sms INNER JOIN screens ON sms.screen_id = screens.id WHERE screens.experience_id = '108';

【讨论】:

  • 谢谢,我在那里使用您的查询得到了相同的结果。我会继续调查,谢谢
【解决方案2】:

您的查询运行良好,这是证据。

DROP TABLE IF EXISTS SMS,SCREENS;
CREATE TABLE SMS(ID INT, SCREEN_ID INT);
CREATE TABLE SCREENS(ID INT, EXPERIENCE_ID INT);

INSERT INTO SMS VALUES (1,1),(2,2);
INSERT INTO SCREENS VALUES(1,108),(2,100);

SELECT id FROM sms
WHERE screen_id IN (SELECT id FROM screens WHERE experience_id = 108 );

+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

假设我的数据模型和你的相同。

【讨论】:

  • 它没有更多的工作,就像我上面概述的那样。我不明白为什么会这样。 cmets 中没有足够的字符空间来粘贴用于创建表的 SQL 代码。我会继续努力,谢谢
  • 运行查询的 Gif:ibb.co/gzPFsd 我已在原始帖子中添加了上下文
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2016-03-11
相关资源
最近更新 更多