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 了解更多详情。
以两个示例表为例:
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 了解更多详情。