在单个数据库中从多个表中选择的SQL查询

时间:2014-06-12 20:02:39

标签: php mysql sql database join

我在数据库中有3个表(c19c19b2g26

我想编写一个SQL查询来搜索并显示匹配记录的所有字段。

我正在使用以下查询:

$query = "SELECT * FROM c19,c19b2,g26 WHERE armyno LIKE '%$searchTerm%'";

但它只适用于表c19, 不会提取其他2个表中的数据。每个表都有一个字段armyno

请帮我解决这个问题 谢谢。

2 个答案:

答案 0 :(得分:1)

好的,您不是在寻找JOIN,而是UNION

SELECT * FROM c19 WHERE armyno LIKE '%$searchTerm%'
UNION
SELECT * FROM c19b2 WHERE armyno LIKE '%$searchTerm%'
UNION
SELECT * FROM g26 WHERE armyno LIKE '%$searchTerm%'

这将允许您同时查询所有三个表。

答案 1 :(得分:0)

您使用的是哪个数据库?这可以在SQL Server中使用。但是,请注意您正在对每条记录进行交叉连接...通常您只想通过限制匹配键来匹配某些记录,例如:

select 
  *
from a 
left join b on b.somekey = a.somekey
left join c on c.someotherkey = b.someotherkey 

在SQL服务器中你可以说*,但是我在你的数据库引擎中没有使用它,所以尝试指定哪个表。在某些环境中,这可能也需要别名:

select 
  a.*,
  b.*,
  c.*
from tableA as a 
left join tableB as b on b.somekey = a.somekey
left join tableC as c on c.someotherkey = b.someotherkey 

通常,您应该看到第一个表中的列,然后是第二个表中的列,后面是给定行的第三个表中的列。如果你想从所有表中获取所有列,但是要单独获取,那么这将是3个单独的选择。

最后,如果所有3个表都有“armyno”,那么我希望它会抛出一个模糊的字段错误。在这种情况下,您需要指定要过滤哪个表的“armyno”字段。