MySQL 如何 SELECT 字段等于另一个 table 的字段?

MySQL How to SELECT where field equals something in another table?

以两个示例表为例:

TableOne
+----+----------+-------------+------------+------------+--+
| id | uid      | thingone    | thingtwo   | thingthree |  |
+----+----------+-------------+------------+------------+--+
|  1 | 7        | 0           | 1          | 1          |  |
|  2 | 8        | 1           | 1          | 0          |  |
+----+----------+-------------+------------+------------+--+

TableTwo
+----+----------+-------------+------------+------------+--+
| id | oid      | thingone    | thingtwo   | thingthree |  |
+----+----------+-------------+------------+------------+--+
|  1 | 7        | Apple       | Coconut    | Grape      |  |
|  2 | 8        | Potato      | Orange     | Banana     |  |
+----+----------+-------------+------------+------------+--+

因此在此示例中,用户 ID 7 将获得 Coconut 和 Grape,但不会获得 Apple。 Userid 8 会得到 Potato 和 Orange,但不会得到 banana。我想以最有效的方式执行此操作,我意识到我可以通过一些 php 处理来执行两个单独的查询,但如果可行的话,我想使用一个查询来执行此操作。

我需要做的是(在单个查询中)通过 id 从 TableOne 获取行,然后 select 从 TableTwo 获取行,其中 theoid = TableOne 的 id 但只从 TableTwo 获取相应的行如果在 TableOne 中是 1 而不是 0。

有人可以帮忙吗?

你需要制作关系表,然后使用连接查询

这个怎么样:

select case when t1.thingone = 1 then t2.thingone else '' end,
       case when t1.thingtwo = 1 then t2.thingtwo else '' end,
       case when t1.thingthree = 1 then t2.thingthree else '' end
from TableOne t1 join TableTwo t2 on t1.uid=t2.oid

您可能需要连接这三者或将它们转换成三行,具体取决于三者的表示方式。

您可以通过使用 IF 并逐一比较两个表中的列来实现它。要比较来自 tableone 的 tabletwo,您需要使用 JOIN,在此查询中我使用 LEFT JOIN。

SELECT a.id, a.`uid`, 
IF(a.`thingone`=1, b.`thingone`, NULL) AS thingone,
IF(a.`thingtwo`=1, b.`thingtwo`, NULL) AS thingtwo,
IF(a.`thingthree`=1, b.`thingthree`, NULL) AS thingthree FROM tableone a
LEFT JOIN tabletwo b ON uid=oid;

查看 MySQL IF() Function 了解更多详情。