像往常一样编码 - 这似乎是一件非常简单的问题,但是因为我自己拿起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'.
答案 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