【发布时间】:2023-03-24 11:00:01
【问题描述】:
因此,如果以前出现过这种情况,我深表歉意,但我找不到可靠的答案。
我正在尝试从与另一个表连接的表中的一组 3 列中获取一列 id。
仅用于获取单个列的 select 语句如下所示:
SELECT id FROM TableA JOIN TableB USING (key1, key2) WHERE someValue = X;
现在据我了解,我可以通过联合来获得这些:
SELECT spec_id1 AS id FROM TableA JOIN TableB USING (key1, key2) WHERE someValue1 = X
UNION
SELECT spec_id2 AS id FROM TableA JOIN TableB USING (key1, key2) WHERE someValue2 = Y
UNION
SELECT spec_id3 AS id FROM TableA JOIN TableB USING (key1, key2) WHERE someValue3 = Z
有没有办法重用 TableA JOIN TableB USING (key1, key2) 所以它不会为每个选择加入?我还有一个适用于上面未显示的所有选择的 WHERE 条件。我可以重复使用类似的东西吗:
FROM TableA JOIN TableB USING (key1, key2) WHERE someOtherValue = W
我正在尝试使用 mysqli 在 PHP 中执行此操作。我最初的直觉是使用临时表并查询它,但我不确定如何在 mysqli 中处理它。如果我可以将该表用于多个以下查询,那将是双重理想的,因为连接表中有额外的数据可以稍后使用。
对不起,如果这太天真了,但我并不是一个真正的大型网络开发人员。提前致谢。
编辑: 我正在研究临时表,这似乎是解决它的好方法。在对它进行任何操作之前,我仍然希望确认这是否是一个好主意。
【问题讨论】:
-
您可以尝试
CASE声明:dev.mysql.com/doc/refman/5.0/en/… 虽然我不太确定这对您的情况有多大用处。我知道您要做什么,但是,一旦将这些列组合在一起,您将如何判断哪个值来自哪个列? -
我不在乎它来自哪个专栏。给你一个更具体的例子来说明我在做什么,这 3 列类似于经理 ID、协调员 ID 和主管 ID。每个角色都是截然不同的角色,尽管看起来可能并不像。我正在努力向他们发送一封类似的电子邮件,这只是一般管理类型的电子邮件。无论他们的确切位置如何,他们都会收到相同的电子邮件,因此尽管出于其他原因需要 3 个不同的列,但他们都会收到相同的电子邮件。
-
啊,明白了。是的,我建议使用
CASE语句和组合WHERE子句,然后如果你真的决定只执行一个查询。
标签: php mysql join mysqli union