【问题标题】:Select Query with OR and NAND使用 OR 和 NAND 选择查询
【发布时间】:2013-06-01 04:27:56
【问题描述】:

我正在尝试设计一个带有 OR 和 NAND 操作的查询,有人可以告诉我查询是否正确:

问题1:这个查询正确吗?

select * from country where country_code='AL' UNION (SELECT * from country
WHERE country_id NOT IN
       (SELECT country_id from country
              where country_name='Land islands'
        UNION
        SELECT country_id from country
               where country_code='AX'
        ));

我在另一个问题的帮助下创建了查询;

Ref:

问题 2:

我想在它们之间使用带有 AND、NOT、NAND、OR 操作的 5 个查询。 我最多创建了 3 个(检查我的问题 1)我需要帮助来创建 5 个选择查询。

我的应用程序是搜索应用程序,用户可以在每个块之间使用 i5 查询块搜索数据库,我们有如下我提到的操作。但是这些操作是在一个表中进行的。

解释:

我想选择表内的记录,我将在表之间使用许多操作。查询中的 MAX 5 操作。

查询 1、查询 2、查询 3、查询 4、查询 5。

案例:

(Query 1 AND Query 2 OR  Query 3 NAND Query 4 NOT Query 5)
(Query 1 OR Query 2 OR  Query 3 OR Query 4 OR Query 5)
(Query 1 AND Query 2 AND Query 3 AND Query 4 AND Query 5)
(Query 1 NOT Query 2 NOT Query 3 NOT Query 4 NOT Query 5)

等..查询块之间的操作可能会有所不同...我将据此编写我的PHP脚本,但我想以可以加入每个逻辑的方式执行逻辑..

现在我需要帮助

【问题讨论】:

  • 在您的第 5 个查询中您要选择什么。
  • 查询是否正确取决于您要达到的目标。根据您的问题,目前尚不清楚。您可能正在寻找某些记录,或者您可能正在尝试使用特定的关键字。
  • 检查我更新的问题..
  • @TomPHP 。 . .您修改后的第二个问题没有意义。查询返回使用 UNION ALLINTERSECTMINUS 等操作组合的结果集。条件子句(例如在您的问题的答案中)使用ANDOR 连接,也许还有NOT
  • 对不起@GordonLinoff 我无法理解。我刚刚编辑了我的 Q2 以获取更多信息。我的情况是 Cases.. 还有更多.. 但操作只会是 AND、OR、NAND NOT。我对 UNION ALL , INTERSECT, MINUS 不是很有经验。

标签: mysql sql operators logic


【解决方案1】:

为什么您在相同的Table 之间使用UNION。您可以使用operatorslike 轻松完成此查询

Select * from country where country_code='AL' or (country_name <> 'Land islands' and country_code <> 'AX');

希望它对你有用。

【讨论】:

  • 你能给我一个参考链接,让我了解“”运算符在我的查询中的使用吗?你能给我任何例子或想法,在它们之间使用 5 个查询吗?我可以使用或、与、与非、非。如果它是 OR,AND 那么我可以做到,但是这个 NAND,NOT 操作让人困惑..
  • 这是not (columnname1 and columnname2) 的语法"NAND"NOT INNOT。现在应用你的逻辑。
  • &lt;&gt; 在 mysql 中是 not equal operator 亲爱的。dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
  • 案例怎么样..我可以有任何语法..使用多个查询
  • 我真的不明白你为什么要使用union,尝试使用operators来解决这个问题..
【解决方案2】:

编写第一个查询的最简单方法:

select *
from country
where country_code='AL' and country_name not in ('Land islands', 'AX')

这是在country_idcountry 表中是唯一的假设下工作的——这是基于命名的合理假设。如果不是这种情况,查询会有点复杂。

您的原始查询需要对表进行多次扫描,使用子查询对 NOT IN 进行反连接,并进行聚合以删除重复项(它具有 union 而不是 union all)。

修改后的版本只是扫描表,保留匹配where子句的行。

根据您的第一个查询,您只需在where 子句中使用ANDOR(也许还有INNOT IN)就可以做任何您想做的事情。

【讨论】:

  • 如果我在同一列中搜索不同列,此查询是否有效?那它会怎么来?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多