从另一个表中选择从一个查询中获取结果

时间:2014-01-01 04:10:33

标签: php mysql sql

像往常一样编码 - 这似乎是一件非常简单的问题,但是因为我自己拿起MySQL并尝试使用它来获取它的最终功能可能需要一些时间,所以请耐心等待我!

所以我的问题是这个 - 我有一个搜索查询,我想要做的是从原始查询中获取一个列结果并拉回另一个表。理论上我认为听起来很简单,但我似乎无法让它发挥作用!

该列名为'package_Id'。基本上,如果名为'package_Id'的列的值为'CUSTOM',我想搜索一个表,如果它不是'CUSTOM',我想搜索另一个表。有三个表,一个名为p2s_2_shipping,另外两个名为custom_packages和packages。

 SELECT package_Id FROM p2s_2_shipping WHERE p2s_shipping.Id = '$p2sId' AND...

这是我被困的地方。有些东西(伪代码时间!)......:

IF package_Id = 'CUSTOM', SELECT * FROM custom_packages WHERE custom_packages.Id = '$p2sId' ELSE SELECT * FROM packages WHERE package.Id = '$p2sId'.

2 个答案:

答案 0 :(得分:0)

您可以使用UNION:

SELECT * FROM custom_packages WHERE custom_packages.Id = '$p2sId' AND '$package_Id' = 'CUSTOM'
UNION
SELECT * FROM packages WHERE package.Id = '$p2sId' AND '$package_Id' != 'CUSTOM'

请注意,两个或多个SELECT子句的UNION需要在每个查询中具有相同数量的相应列,因此您可能需要修改*以更具体地说明您期望的列。 / p>

<强>已更新

如果你想把它绑定到另一个表,你可以像这样使用LEFT JOIN:

SELECT t1.*, 
       COALESCE(t2.col1, t3.col1) AS col1, 
       COALESCE(t2.col2, t3.col2) AS col2,
       // you'll need to do this for each column from t2/t3 that you want..
FROM t1
LEFT JOIN t2 ON t2.some_id = t1.some_id AND t1.some_column = 'custom'
LEFT JOIN t3 ON t3.some_id = t1.some_id AND t1.some_column != 'custom'

答案 1 :(得分:0)

不确定这是否正是您想要的,但您上面给出的伪代码可以使用CASE WHEN ... THEN ... ELSE ... END构造轻松地在SQL中编写。要使用它,您可以先将所有3个表连接在一起,然后根据package_ID值,您可以有选择地从两个表中的一个中选择列。

SELECT CASE WHEN s.package_Id = 'CUSTOM' THEN p.column1 ELSE cp.column1 END 
FROM p2s_2_shipping s  
LEFT OUTER JOIN custom_packages cp ON s.some_id = cp.some_id 
LEFT OUTER JOIN packages p ON s.some_id = p.some_id