在外部查询中使用内部查询的值

huangapple go评论56阅读模式
英文:

Use inner select value in outer select

问题

这是我的MySQL查询:

BEGIN

  SELECT
    sID vID,
    sSSN vSSN,
    CONCAT_WS('; ',
    IF(COUNT(DISTINCT pCheck) = 0, "Employee had no paycheck data during the month", NULL),
      IF(COUNT(DISTINCT sDate) > 1, "Represents multiple benefit records", NULL)
    ) comments,
    sLocation vLocation
  FROM groups
  WHERE (sSSN, sID) NOT IN (
    SELECT pSSN, pID, pCheck
    FROM vGroups
    WHERE pID = pvID
      AND pDate >= pvStartDate
  )
  AND sID = pID
  GROUP BY sSSN, sID;

  END$$

你可以在外部SELECT语句中使用pCheck,我已经将它包括在内部的子查询中,这应该可以解决你的问题。

英文:

Here's a nice, easy question for you all to get more reputation on.

Here's my mysql query:

BEGIN

  SELECT
    sID vID,
    sSSN vSSN,
    CONCAT_WS('; ',
	IF(COUNT(DISTINCT pCheck) = 0, "Employee had no paycheck data during the month", NULL),
      IF(COUNT(DISTINCT sDate) > 1, "Represents multiple benefit records", NULL)
      
    ) comments,
    sLocation vLocation
  FROM groups
  WHERE (sSSN, sID) NOT IN (
    SELECT pSSN, pID, pCheck
    FROM vGroups
    WHERE pID = pvID
      AND pDate >= pvStartDate
  )
  AND sID = pID
  GROUP BY sSSN, sID;

  END$$

Why do I get an error when trying to use pCheck in the outer SELECT statement? Is it because it's only being defined further down?

I was thinking perhaps an AS after the inner SELECT would fix this but I got an error when I tried it, and either way I only want pCheck, not pSSN or pID.

Please, all you nice knowledgeable people out there, is there a way I can use pCheck where I need it?

答案1

得分: 0

在你的查询中没有外部或内部选择查询...
你从表格 groups 中有一个查询,并且只能使用它的字段。

你的内部查询属于 WHERE 子句,所以如果你想在查询中使用 vGroups 的字段,你应该将 groups 与 vGroups 进行连接,然后使用它的字段,例如

SELECT
    sID vID,
    sSSN vSSN,
    CONCAT_WS(';', 
    IF(COUNT(DISTINCT pCheck) = 0, "员工在该月没有薪资数据", NULL),
      IF(COUNT(DISTINCT sDate) > 1, "代表多个福利记录", NULL)

    ) comments,
    sLocation vLocation,
    vGroups.pCheck
  FROM groups
  LEFT JOIN vGroups ON groups.sID = vGroups.pID
  WHERE (sSSN, sID) NOT IN (
    SELECT pSSN, pID, pCheck
    FROM vGroups
    WHERE pID = pvID
      AND pDate >= pvStartDate
  )

英文:

In your query there is no outer or inner select query...
You have one query from table groups, and can use only its fields

Your inner query belongs to WHERE clause, so if you want to use vGroups fields in your query you should join groups with vGroups and then use its fields, for example

SELECT
    sID vID,
    sSSN vSSN,
    CONCAT_WS('; ',
    IF(COUNT(DISTINCT pCheck) = 0, "Employee had no paycheck data during the month", NULL),
      IF(COUNT(DISTINCT sDate) > 1, "Represents multiple benefit records", NULL)

    ) comments,
    sLocation vLocation,
    vGroups.pCheck
  FROM groups
  LEFT JOIN vGroups ON groups.sID = vGroups.pID
  WHERE (sSSN, sID) NOT IN (
    SELECT pSSN, pID, pCheck
    FROM vGroups
    WHERE pID = pvID
      AND pDate >= pvStartDate
  )

huangapple
  • 本文由 发表于 2020年1月6日 15:53:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/59608472.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定