如果第一个没有生成结果,如何在mysql上运行两个查询

时间:2012-06-27 08:13:34

标签: mysql

这是我第一次来这里,我是一个初学者,所以请好好忍受我的白痴主义:)

我想在mysql中运行两个查询,从两个数据库开始,如果第一个查询生成没有结果,那么第二个查询应该搜索第二个数据库中的相同内容。

我们有汽车保险数据,有两个数据库,一个用于个人客户,第二个用于企业客户。我们需要通过chasis no或引擎号来搜索车辆。从两个数据库开始,但是如果从第一个数据库找不到结果,那么它应该用于第二个数据库。

首先查询:

SELECT * FROM skpoly_vw4 WHERE CHASIS = 878933

第二次查询:

SELECT * FROM vw_motorschedule where sw_skpoly_chasis = 878933

我们有一个数据库,但我们有两个不同的视图,对于个人客户来说是skpoly_vw4,对于企业客户来说是vw_motorschedule

3 个答案:

答案 0 :(得分:1)

这个怎么样?

SELECT SQL_CALC_FOUND_ROWS * 
FROM DATABASE1
WHERE database1_CHASIS = 12345**

UNION ALL

SELECT * 
FROM DATABASE2 
WHERE FOUND_ROWS() = 0 AND database2_chasis= 12345** 

Demo

更新1

每次对话,你得到mysql错误号1222.这种情况正在发生,因为在表skpoly_vw4& vw_motorschedule个字段数不相同。对于UNION ALL,字段必须相同。

E.g。在table1中你有id和name,而在table2中你有id,fname,lname然后如果你试着UNION ALLselect *一起使用它就不会像在table1那样有效,但是在table2中有2列是3列。

希望你有我想说的话。

另请阅读 select * from two tables with different # of columns

答案 1 :(得分:0)

执行第一个查询后使用SELECT FOUND_ROWS( )

即, 在运行第二个查询之前检查SELECT FOUND_ROWS( )>0

编辑: 这是一个例子

SELECT * FROM skpoly_vw4 WHERE CHASIS = 878933

DECLARE @rows INT
SET @rows= FOUND_ROWS();
if (@rows>0)
SELECT * FROM vw_motorschedule where sw_skpoly_chasis = 878933

答案 2 :(得分:0)

试试这个

$query = mysql_query("SELECT * FROM DATABASE1 WHERE database1_CHASIS = 12345");

if(mysql_num_rows($query)==0){
   $query = mysql_query("SELECT * FROM DATABASE2 where database2_chasis= 12345");
}

$customer = mysql_fetch_assoc($query);