我必须使用多个where子句检索信息。我只能使用嵌套查询来做到这一点。我应该能够在一个命令中提取2个shiftName查询的信息。 查找班次为“ Classic Evening”和“ Morning Shine”的员工的名字和姓氏。
到目前为止,我发现此代码的运气不佳,但是这里的问题是它返回的是“ Morning Shine”的结果,而不是“ Classy Evening”的结果。 就像嵌套查询甚至没有被处理。有人可以帮忙吗?我是SQL新手,所以如果我的问题不够清楚,我深表歉意。
from pyspark.sql import HiveContext, Row
#or
from pyspark.sql import SQLContext, Row
sc = SparkContext(...)
hiveCtx = HiveContext(sc)
#Then we can run query
hiveCtx.sql("""SELECT * FROM TABLE WHERE....""")
答案 0 :(得分:0)
条件在哪里
当您要对另一个查询做条件时,需要提供要比较的列。
您没有提供要比较的列,因此它忽略了where条件的第二部分。
在您的情况下,您希望“晨光”和“经典之夜”的职员ID相等。
所以您需要这样做:
SELECT stfName, stlNname
FROM STAFF, STAFF_SHIFT_CENTER
WHERE STAFF.staffID=STAFF_SHIFT_CENTER.staffID
AND STAFF_SHIFT_CENTER.shiftName='Morning Shine'
AND STAFF_SHIFT_CENTER.staffID IN (SELECT staffID FROM STAFF_SHIFT_CENTER
WHERE shiftName='Classy Evening');
此外,我建议您使用JOIN代替CARTESIAN来改善查询。
因此查询将是:
SELECT stfName, stlNname
FROM STAFF s JOIN STAFF_SHIFT_CENTER ssc
ON s.staffID=ssc.staffID
WHERE ssc.shiftName='Morning Shine'
AND ssc.staffID IN (SELECT staffID FROM STAFF_SHIFT_CENTER
WHERE shiftName='Classy Evening');
答案 1 :(得分:0)
您可以为此使用聚合。
SELECT s.stfName, s.stlNname
FROM STAFF s JOIN
STAFF_SHIFT_CENTER ssc
ON s.staffID = ssc.staffID
WHERE ssc.shiftName IN ('Morning Shine', 'Classy Evening')
GROUP BY s.stfName, s.stlNname
HAVING COUNT(DISTINCT ssc.shfitName) = 2; -- each group has both shifts
注意:
FROM
子句中使用逗号。JOIN
语法。