首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在表中查找不在其他表中的行

问如何在表中查找不在其他表中的行
EN

Stack Overflow用户
提问于 2013-11-16 07:30:51
回答 3查看 65关注 0票数 1

我有两张桌子:

  1. staticip有两列:ip,staticipid
  2. rm_users有许多列,其中之一是staticipcpe。

我希望在staticip表中找到行,即staticipid='2'和表rm_users中的ip不是相等的staticipcpe。

我尝试了下面的sql语句,但是它没有工作。

代码语言:javascript
复制
$sqls="select s.ip, s.staticipid from staticip s 
            where s.staticipid='2' and not exists 
            (select u.staticipcpe from rm_users u 
            where u.staticipcpe=s.ip";

我有以下信息

代码语言:javascript
复制
"Warning: mysql_result(): supplied argument is not a valid MySQL result resource"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-16 07:34:45

在其他可能的问题中,您忽略了一个结束括号:

代码语言:javascript
复制
$sqls="select s.ip, s.staticipid from staticip s 
        where s.staticipid='2' and not exists 
        (select u.staticipcpe from rm_users u 
        where u.staticipcpe=s.ip)";

还有, functions are deprecated。使用MySQLi或PDO。

票数 1
EN

Stack Overflow用户

发布于 2013-11-16 07:35:32

如果你的查询是正确的,你可以使用非IN条款来实现你的目标。

喜欢

代码语言:javascript
复制
Select Id
From Test
Where Id Not In( Select Foo From Bar )

见更多信息

MySQL "NOT IN" query

票数 1
EN

Stack Overflow用户

发布于 2013-11-16 07:50:04

根据数据库的不同,连接可能比子查询更好(请参见Join vs. sub-query),我还喜欢回退(Importance of backtick around table name in MySQL query):

代码语言:javascript
复制
SELECT `s`.`ip`,`s`.`staticipid`
FROM `staticip` AS `s`
INNER JOIN `rm_users` AS `u`
ON `u`.`staticipcpe`<>`s`.`ip`
WHERE `s`.`staticipid`='2';

用通俗的英语:

  • 选择:从结果中获取字段"ip“和"staticipid”。
  • 出发地:主表将是"staticip“-别名为"s”。
  • 内部连接:比较"staticip“中的行和"rm_users”中的行
  • ON (内部连接的一部分):从"ip“字段中未列出"staticipcpe”从"rm_users“字段中获取未列出的行
  • 其中:筛选结果使"staticipid“的值必须为"2”。

不要忘了考虑索引字段rm_users.staticipcpe、staticip.staticipid (我假设这个字段已经是主键)和staticip.ip,否则您将看到完整的表扫描,而不是利用MySQL的b树从内存中查找。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20015999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档