【问题标题】:Is there a way to put WHERE for both databases while using JOIN?有没有办法在使用 JOIN 时为两个数据库放置 WHERE?
【发布时间】:2019-07-09 13:57:52
【问题描述】:

我有两个表,我们称它们为 DB1 和 DB2,我想将它们加入,但要过滤它们。

示例(在 PHP 中使用):

public function PersonalData($example)
{
    $this->getDBConnection('cms1', 'cms_neu');

    $sql = "SELECT id1, name1, status1, section1  
            FROM DB1 pd
            WHERE id1 = '".$example['id1']."' 
            AND status1 = 1
            JOIN DB2 dp ON pd.section1 = dp.section2
            WHERE dp.type2 = 30";
    $query = $this->dbh->query($sql);
    $result = $query->fetchAll();

    return $result;
}

我无法正确解释我自己需要什么,因此我真的找不到解决方案

我尝试过使用 JOIN 并在其后添加 WHERE/AND,但我认为这行不通。

所以它应该选择每个 id1 并将 section1 的值更改为 section2 中的值,基于 type2 正好是 30。

【问题讨论】:

  • JOIN 出现在您的 WHERE 子句之前 - dofactory.com/sql/join。我认为您的意思是 tables,而不是 databases
  • 正确无误。固定。

标签: php mysql sql


【解决方案1】:

SQL 语句由子句组成,子句包括SELECTFROMWHERE。这些应该按此顺序出现在SELECT 语句中。

JOINFROM 子句中的运算符。

因此,您的查询应如下所示:

SELECT id1, name1, status1, section1  
FROM DB1 pd JOIN
     DB2 dp
     ON pd.section1 = dp.section2
WHERE pd.id1 = '".$example['id1']."' AND
      pd.status1 = 1 AND
      dp.type2 = 30;

注意事项:

  • 学习使用参数!不要将查询字符串与参数值混淆。这只会导致代码风险和难以调试的错误。
  • 限定所有列引用,特别是当查询包含多于表引用时。

【讨论】:

  • 所以即使我想在查询中也添加 type2 = 50 ,它会起作用吗?
  • @asobak 。 . .您可以在WHERE 子句中添加更多条件。
  • 我的意思是这让我很困惑,因为两个表都有 ID 但值不同,我只需要从 DB1 使用,section2 应该只用 30 和 50 中指定的值替换 DB1 中的每个 ID DB2。
  • @asobak 。 . .这似乎与您在这里提出的问题无关。如果您有其他问题,请将其作为问题提出。
猜你喜欢
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多