【问题标题】:Fetch data from multiple MySQL tables从多个 MySQL 表中获取数据
【发布时间】:2010-04-13 05:53:26
【问题描述】:

我的两张表是这样的:

       TABLE1                      TABLE2
+--------------------+      +--------------------+
|field1|field2|field3|  and |field2|field4|field5|
+--------------------+      +--------------------+

我已经在为 TABLE1 运行 SELECT 查询,并将所有数据分类到变量中:

$query = "SELECT * FROM TABLE1 WHERE field2 = 2";
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);    
  if((!is_bool($result) || $result) && $num_rows) {
   while($row = mysql_fetch_array($result))
    {
   $field1 = $row['field1'];
   $field2 = $row['field2'];
   $field3 = $row['field3'];
    }
  }

我想要做的是从 TABLE2 上的“field4”获取数据并将其添加到我的变量中。我想得到 field4 WHERE field2 = 2

【问题讨论】:

标签: php mysql join


【解决方案1】:
SELECT
  t1.*,
  t2.field4
FROM
  TABLE1 AS t1,
  TABLE2 AS t2
WHERE 
    t1.field2 = 2
  AND
    t1.field2 = t2.field2

您想加入可以显式(使用JOIN 运算符或其变体之一)我们隐式(通过SELECT直接从多个表中)完成的两个表。

根据您的描述,我想您希望在两个表中的 field2 具有相同值 (2) 的情况下进行联接。


如果 TABLE2 不会总是提供有效的连接候选,但您仍然需要来自 TABLE1 的数据,您应该使用 LEFT JOIN(为 field4 提供 NULL,其中没有匹配的):

SELECT
  t1.*,
  t2.field4
FROM
    TABLE1 AS t1
  LEFT JOIN
    TABLE2 AS t2
  ON
    t1.field2 = t2.field2
WHERE 
  t1.field2 = 2

【讨论】:

  • @Jon McIntosh 不客气 :) 如果您的问题得到解决,请考虑关闭问题(通过接受答案)。
  • Left Join和Normal从两个表中取数据有什么区别?
  • @tisuchi 正如我的回答中所述,外连接(LEFT/RIGHT)和“正常”(JOIN 或多个表)之间的选择与严格连接行的愿望有关与NULL 不匹配的替补。我建议你看看Difference between INNER and OUTER joins的热门答案
【解决方案2】:
【解决方案3】:

您需要使用JOIN:

SELECT TABLE1.*,TABLE2.field4 FROM TABLE1 JOIN TABLE2 ON TABLE1.field2=TABLE2.field2 WHERE TABLE1.field2=2;

【讨论】:

    【解决方案4】:

    您好,请尝试以下作为您的查询。

    在选择查询中并不总是首选使用 *

    SELECT T1.field1,T1.field2,T1.field3, T2.field4 FROM TABLE1 AS T1 INNER JOIN TABLE2 AS T2 ON T1.field2=T2.field2 WHERE field2 = 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      相关资源
      最近更新 更多