Mysql 连接选择中的Where子句

Mysql 连接选择中的Where子句,mysql,sql,Mysql,Sql,我正试图适应一个类似的解决方案-我有一个连接内的SELECT查询,问题是查询对所有行(我说的是每个表60000行)都以完全方式运行-它在3个表上运行 所以我想做的是,在连接内部的SELECTs中添加一个WHERE子句。 但是,我无法访问外部选择并获得所需的适当位置条件。 我正在尝试的查询如下: 注意:store_id是一个通过框架绑定的变量——让我们假设它是数字12345 我该怎么做?有什么想法吗?我们最终采用了一种不同的方法——我们只是将所有内容合并在一起,只选择了正确的专栏和案例。最后一个问

我正试图适应一个类似的解决方案-我有一个连接内的SELECT查询,问题是查询对所有行(我说的是每个表60000行)都以完全方式运行-它在3个表上运行

所以我想做的是,在连接内部的SELECTs中添加一个WHERE子句。 但是,我无法访问外部选择并获得所需的适当位置条件。 我正在尝试的查询如下:

注意:store_id是一个通过框架绑定的变量——让我们假设它是数字12345


我该怎么做?有什么想法吗?

我们最终采用了一种不同的方法——我们只是将所有内容合并在一起,只选择了正确的专栏和案例。最后一个问题是:

SELECT  c.id AS id,
      s.id AS store_id,
      c.enabled AS enabled,
      s.store_name AS store_name,
      s.store_url AS store_url,
      c.verified AS verified,
      (CASE WHEN eb.rating_total IS NOT NULL THEN eb.rating_total
            WHEN am.rating_total IS NOT NULL THEN am.rating_total
            WHEN ax.rank IS NOT NULL THEN ax.rank
      END) AS rating,
      (CASE WHEN eb.positive_percent IS NOT NULL THEN eb.positive_percent
            WHEN am.positive_percent IS NOT NULL THEN am.positive_percent
            WHEN ax.rank IS NOT NULL THEN '100'
      END) AS percent,
      (CASE WHEN eb.positive_percent IS NOT NULL THEN 'ebay'
            WHEN am.positive_percent IS NOT NULL THEN 'amazon'
            WHEN ax.rank IS NOT NULL THEN 'alexa'
      END) AS type
FROM compete_settings c
LEFT JOIN stores s
  ON c.compete_id = s.id
LEFT JOIN ebay_sellers eb ON c.compete_id = eb.store_id
LEFT JOIN amazon_sellers am ON c.compete_id = am.store_id
LEFT JOIN alexa_ratings ax ON c.compete_id = ax.store_id
WHERE c.store_id = :store_id

只需从子查询中省略WHERE story\u id=c.store\u id。它被用作r联合体上的joinfield,因此匹配将在外部级别进行。顺便说一句:工会应该/可能是工会所有人。wildplasser说的:依赖于你的加入条件。另外,我有时在具有硬连线值的联合中遇到数据类型问题。将“ebay”强制转换为VARCHAR50 AS type可能会防止type列对于其他值来说太短。虽然我在bit/integer类型中更经常看到这个问题。@wildplasser,但它会提前获取整组行,这是我想要避免的。它运行查询并一起检索90000行,但在最好的情况下忽略了95%,在最坏的情况下忽略了99.5%。这取决于查询生成器/优化程序+密钥结构+统计数据+DBMS平台mysql可能有点尴尬,但由于子类无论如何都是锚定的,您可以随时重写它,从易趣卖家那里选择store_id、rating_total、positive_percent、“易趣”作为类型,其中store_id=:store_id,并为联盟的其他分支选择类似的类型;我需要一个有点不同的身份证。。。不管怎样,我们想出了一个不同的解决方案,我会在几分钟后发布。无论如何谢谢你!
SELECT  c.id AS id,
      s.id AS store_id,
      c.enabled AS enabled,
      s.store_name AS store_name,
      s.store_url AS store_url,
      c.verified AS verified,
      (CASE WHEN eb.rating_total IS NOT NULL THEN eb.rating_total
            WHEN am.rating_total IS NOT NULL THEN am.rating_total
            WHEN ax.rank IS NOT NULL THEN ax.rank
      END) AS rating,
      (CASE WHEN eb.positive_percent IS NOT NULL THEN eb.positive_percent
            WHEN am.positive_percent IS NOT NULL THEN am.positive_percent
            WHEN ax.rank IS NOT NULL THEN '100'
      END) AS percent,
      (CASE WHEN eb.positive_percent IS NOT NULL THEN 'ebay'
            WHEN am.positive_percent IS NOT NULL THEN 'amazon'
            WHEN ax.rank IS NOT NULL THEN 'alexa'
      END) AS type
FROM compete_settings c
LEFT JOIN stores s
  ON c.compete_id = s.id
LEFT JOIN ebay_sellers eb ON c.compete_id = eb.store_id
LEFT JOIN amazon_sellers am ON c.compete_id = am.store_id
LEFT JOIN alexa_ratings ax ON c.compete_id = ax.store_id
WHERE c.store_id = :store_id