【问题标题】:SQL Query related conditionsSQL 查询相关条件
【发布时间】:2022-08-13 20:53:03
【问题描述】:

我想制定一个 SQL 条件,如果

type=1 和 item=1 那么产品列必须是 product=4 否则 SQL 不应该选择该行,但如果 item=2 或任何数字,那么 SQL 将选择该行。产品列无关紧要,它是什么值.

但如果 type=0 或任何数字,则 item 和 product 列的值无关紧要。 SQL 将选择行

在我的 SQL 查询中,它只需要 type=1、item=1 和 product=4 的行。这是一个示例表

Type Item Product
1 2 4
1 2 3
1 1 5
1 1 4
1 1 4
0 2 4
0 1 5
0 0 0

请看一下我的 SQL 查询

$tables = Table::whereRaw(\"CASE WHEN (table.type = 1 AND table.type = 1) THEN table.type = 4 END\");

我想要的结果输出应该是这样的

Type Item Product
1 2 4
1 2 3
1 1 4
1 1 4
0 2 4
0 1 5
0 0 0
  • CASE WHEN (table.type = 1 AND table.type = 1) THEN table.type = 4 END 我看到table.type 3 次

标签: php mysql sql laravel


【解决方案1】:

编程主要是将人类语言描述的混乱、模棱两可和灵活的措辞翻译成机器可以理解的结构化和逻辑的东西。实际上,您必须像电脑一样思考,而不是逐字转换句子。

在这种情况下,您需要将所有要求放入相同形式的布尔语句的形式中:“如果行满足条件 X 则包含它”。然后您可以将它们组合起来:“如果行满足条件 X 或行满足条件 Y,则包含它”。

所以...

type=1 和 item=1 那么产品列必须是 product=4 否则 SQL 不应该选择该行

变成

如果 type 等于 1 并且 item 等于 1 并且 product 等于 4,则包括该行

下一个

item=2 或任何数字,然后 SQL 将选择该行。

变成(假设“任何数字”的意思是“除 1 之外的任何数字”——如果该描述是作为工作要求提供给我的,我会因为不清楚而拒绝该任务)

如果 item 不等于 1,则包括该行

相似地

但如果 type=0 或任何数字,则 item 和 product 列的值无关紧要。 SQL 将选择行

大概意思

如果 type 不等于 1,则包括该行

现在我们有了三个简洁的语句,它们很容易转换为 SQL,并结合起来:

( type=1 and item=1 and product=4 )
or
( item != 1 )
or
( type != 1 )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多