【问题标题】:Basic SQL sub-query基本 SQL 子查询
【发布时间】:2013-01-27 07:13:06
【问题描述】:

我有一张名为 products 的表格。基本上我需要在这样的各个字段中使用相同的单词进行搜索,这样可以正常工作。

SELECT
    `id`,
    `product-id`,
    `country`,
    `name`,
    `description`,
    `branch`,
    `stock`,
    `price`
FROM
    `products`
WHERE
    `name` LIKE "%car%"
OR `description` LIKE "%car%"
OR `branch` LIKE "%car%"
OR `product-id` LIKE "%car%"

问题是现在我想要一个不同的查询。我只想显示来自特定国家/地区的所有汽车,以及其他字段。所以如果我运行这个查询

SELECT
    DISTINCT(b.`id`) id,
    a.id,
    a.`product-id`,
    a.`country`,
    a.`name`,
    a.`description`,
    a.`branch`,
    a.`stock`,
    a.`price`
FROM
    `products` as a,
(
    SELECT
        *
    FROM
        `products`
    WHERE
        `country` = "Canada"
    LIMIT 0,
    10
)AS b
WHERE
    a.`id` = b.`id`
OR  b.`product-id` LIKE "%car%"
OR  b.`name` LIKE "%car%"
OR  b.`branch` LIKE "%car%"
OR  b.`description` LIKE "%car%"

LIMIT 0, 10

我从多个国家/地区获得结果,我做错了什么?

提前致谢

【问题讨论】:

标签: sql select subquery


【解决方案1】:

您不需要额外的加入。只需使用适当的括号将条件添加到 where 子句:

SELECT
    `id`,
    `product-id`,
    `country`,
    `name`,
    `description`,
    `branch`,
    `stock`,
    `price`
FROM
    `products`
WHERE
    country = 'Canada' and
    ( `name` LIKE "%car%"
     OR `description` LIKE "%car%"
     OR `branch` LIKE "%car%"
     OR `product-id` LIKE "%car%"
    )
limit 30

我认为这里的限制是合适的,尽管我不确定问题的意图是什么。

【讨论】:

  • 两种解决方案都是正确的。谢谢 JW 和戈登。但 JM 先回答,所以我投给他。
  • @PaulReid 。 . .两种解决方案之间存在根本区别。问题和 JW. 的解决方案中的查询有一个不必要的连接。此版本将其删除。
【解决方案2】:

您只需对条件进行分组,

SELECT  ...
FROM    ...
WHERE   (a.`id` = b.`id`) AND
        (  
            b.`product-id` LIKE "%car%" OR  
            b.`name` LIKE "%car%" OR  
            b.`branch` LIKE "%car%" OR  
            b.`description` LIKE "%car%"
        )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多