MySQL在一次查询中选择多个不同的位置

MySQL在一次查询中选择多个不同的位置,mysql,sql,syntax,Mysql,Sql,Syntax,首先,尽管MySQL被弃用,但目前我不得不使用它。我非常清楚这一事实。希望你们能在sql语法方面帮助我 我试图从一些不同的表中访问几列。问题是,有些列需要与我需要的最后一列不同的where子句,而最后一列的where子句需要来自查询其余部分的信息,所以我无法将其拆分为多个查询,我已经尝试过了 我不能使用union,因为一个select语句选择四列,而另一个语句选择一列 查询: (SELECT DISTINCT inventory.Quantity, itemtypes.Itemtypename,

首先,尽管MySQL被弃用,但目前我不得不使用它。我非常清楚这一事实。希望你们能在sql语法方面帮助我

我试图从一些不同的表中访问几列。问题是,有些列需要与我需要的最后一列不同的where子句,而最后一列的where子句需要来自查询其余部分的信息,所以我无法将其拆分为多个查询,我已经尝试过了

我不能使用union,因为一个select语句选择四列,而另一个语句选择一列

查询:

(SELECT DISTINCT inventory.Quantity, itemtypes.Itemtypename, 
itemtypes.ItemtypeID, inventory.ItemID
FROM inventory JOIN itemtypes ON inventory.ItemtypeID = itemtypes.ItemtypeID
JOIN sets ON inventory.SetID = sets.SetID
WHERE inventory.ItemtypeID = itemtypes.ItemtypeID
AND itemtypes.Itemtypename = 'Set'
AND sets.SetID = '".$setid."')
UNION
(SELECT DISTINCT sets.Setname
FROM sets JOIN inventory ON sets.SetID = inventory.ItemID
WHERE sets.SetID = inventory.ItemID)

这就是我试图使用的,但没有成功。在不使用多个查询的情况下,我似乎找不到任何其他方式链接到不同的select语句(由于PHP文件的结构,不可能正确执行)。只要这个问题得到解决,文件的其余部分就可以工作。希望你们能在这方面帮助我,请让我知道这是否可行。如果您还需要查看我的PHP代码,请告诉我$setid是从文件中的get派生的,包含数据库中存在的值。

可能是,您可以这样尝试。它在SQL Server中运行良好

SELECT TMP1.Quantity,TMP1.Itemtypename, TMP1.ItemtypeID, TMP1.ItemID, TMP2.Setname
FROM(
SELECT DISTINCT 
inventory.Quantity, 
itemtypes.Itemtypename, 
itemtypes.ItemtypeID, 
inventory.ItemID
FROM inventory 
JOIN itemtypes ON inventory.ItemtypeID = itemtypes.ItemtypeID
JOIN sets ON inventory.SetID = sets.SetID
WHERE inventory.ItemtypeID = itemtypes.ItemtypeID
AND itemtypes.Itemtypename = 'Set'
AND sets.SetID = '".$setid."'
) AS TMP1,
(
SELECT DISTINCT 
sets.Setname
FROM sets 
JOIN inventory ON sets.SetID = inventory.ItemID
WHERE sets.SetID = inventory.ItemID
) AS TMP2

希望这是你想要的。你的问题似乎很含糊

MySQL没有被弃用!你从哪里弄来的?API中的某些函数被更新的函数所取代,仅此而已。对于问题:示例数据和所需的输出肯定会有帮助。并且不需要在where子句中重复join条件。你到底在说什么不同的where子句?您的查询可以完美地写在一个查询中,甚至不需要联合。非常不清楚的问题…@fancypants我将尝试解释两个where子句的区别。它的中心是sets.SetID=“$SetID.”和sets.SetID=inventory.ItemID$setid与inventory.ItemID不同$setid基本上是一个包含多个集合的集合,集合的ID与inventory.ItemID相同。如果我在上面的Select子句中使用Setname,我将从$setid集合中获取Setname,这是我不想要的。这就是为什么我试图从该集合中的集合中获取所有集合名,其中SetID=$SetID中的selected ItemIDs。我同意这让人困惑。你好,再见,谢谢你的快速回答!这无疑是朝着正确方向迈出的一步。不过,我还需要问一件事。在第二个where子句中,wher表示where set.SetID=inventory.ItemID,它从数据库中获取所有ItemID。我需要的是它只获取从第一个select子句中选择的ItemIDs。这是一件可能的事情吗?或者我需要额外的查询吗?为什么需要单独的查询?只需在第一个select子句中添加您的ItemId,因为在筛选或where条件中似乎并没有区别。这样做会更容易。如果您从两个表中添加示例数据集的屏幕截图和所需的输出,会更容易。很抱歉回答得太晚,但问题已经解决。你们都是对的,我不需要两个不同的select子句,1就足够了。显然,inventory.SetID和sets.SetID并不完全相同,因为inventory中存在集合中不存在的条目。我从sets.SetID='“$SetID.”切换到inventory.SetID='“$SetID.”,效果非常好:)我感谢你们的帮助,感谢你们帮助我,尽管我的问题措词不当且模棱两可。下次需要帮助时,我会尽量说得更详细。