我有2个包含数据的表和2个“非我的”表(在ReferenceDB中),其中事物ID可以映射到其名称。
矿井表之一是带有以下重要列的订单:charName, stationID, typeID, bid.
另一个表具有以下重要列:transactionDateTime, stationID, typeID, person, transactionType
我开始绞尽脑汁,想到了如何找到最近没有任何记录的订单(例如,给定的天数)。但是从一开始,我就为我设置了一个任务,就是查找根本没有记录的订单。为此,我想出了LEFT JOIN
请参阅下面的最大查询。
对我来说,顺序是charName/persone
+ stationID
+ typeID
+ transactionType/bid
的组合,因此,如果实际上这四个更改之一发生变化,则顺序不同。
问题是transactionType可以是“ yes”或“ no”,并且出价是0或不为0。所以我不能或不知道如何JOIN ON
不同的数据类型。因此,从逻辑上讲,我想加入4列,例如:
FROM ordersTable LEFT JOIN recordsTable ON ordersTable.typeID = recordsTable.typeID
AND ordersTable.stationID = recordsTable.stationID
AND ordersTable.charName = recordsTable.person
AND ordersTable.bid = recordsTable.transactionType
显然,上面的最后一个字符串对不同的数据类型无效。
所以有一会儿我以为我可以对两次transactionType =“ yes”的bid = 0进行这样的查询,第二次对!= 0和transactionType =“ no”的出价进行第二次查询,请参见下面的查询,以获得0 /“ yes”的组合。但似乎它并不完全符合我的意愿。因为JOIN ON中的
AND ordersTable.bid IN (0) AND recordsTable.transactionType="yes"
不会执行任何操作。 (因为我得到的结果是在bid = 1的情况下)SELECT invTypes.typeName, stastations.stationName, main.* FROM referenceDB.invTypes, referenceDB.stastations, (
SELECT ordersTable.charName, ordersTable.stationID, ordersTable.typeID, ordersTable.bid, ordersTable.orderState, ordersTable.volRemaining
FROM ordersTable LEFT JOIN recordsTable ON ordersTable.typeID = recordsTable.typeID
AND ordersTable.stationID = recordsTable.stationID
AND ordersTable.charName = recordsTable.person
AND ordersTable.bid IN (0) AND recordsTable.transactionType="yes"
WHERE recordsTable.typeID IS NULL
AND ordersTable.orderState IN (0) ) as main
WHERE stastations.stationID = main.stationID AND invTypes.typeID = main.typeID;
问题:
是否可以告诉mySQL将“是”视为0,反之亦然?如果是,我该如何在查询中进行操作?如果没有,我该怎么做(查找没有与其相关记录的订单)?
也许有人可以提出一项查询,以查找在给定的时间内没有记录的订单?
先感谢您!
最佳答案
一种方法是使用显式比较:
((ordersTable.bid = 0 and recordsTable.transactionType = 'No') or
(ordersTable.bid = 1 and recordsTable.transactionType = 'Yes')
)
另一种方法是使用
case
语句:(case when recordsTable.transactionType = 'No' then 0 else 1 end) = ordersTable.bid
关于mysql - mySQL:LEFT JOIN,其中需要对不同类型的数据进行连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20389055/