1

我有一个存储调查答案的表,我试图查询 mysql 以告诉我调查是否由答案字段 = 16 或 20 的人回答

我有以下 mysql 语句

SELECT DISTINCT(submissionID) as submissionID FROM answer 
WHERE EXISTS (
    SELECT *
    FROM answer
    WHERE submissionID = submissionID AND (answer = '16' OR answer = '20')

)

在这里编辑

抱歉,我认为我的问题没有说对,所以这是我的表格结构:

CREATE TABLE IF NOT EXISTS `answer` (
  `aID` int(11) NOT NULL AUTO_INCREMENT,
  `sID` int(11) NOT NULL,
  `qtID` int(11) NOT NULL,
  `answer` text NOT NULL,
  `userIP` text NOT NULL,
  `submissionID` int(11) NOT NULL,
  PRIMARY KEY (`aID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=422 ;
  1. aID是给出的每个答案的唯一 ID
  2. sID是调查 ID(因为我可能有多个调查)
  3. qtID是 questionsID 值
  4. answer是用户在qtID本次调查中给出的答案
  5. userIP是可以自我解释的
  6. submissionID是给每个提交的 ID

所以我知道在这张表中有 5 个唯一的提交 ID,但只有一个submssionID答案字段 =1620

4

4 回答 4

1

我认为您的查询过于复杂,请尝试以下操作:

SELECT DISTINCT submissionID FROM answer 
WHERE answer IN ('16', '20');
于 2012-06-04T17:29:27.597 回答
0

“我这里出了什么问题?”

将子查询与外部查询相关联的条件:

submissionID = submissionID

总是正确的。我不认为你真的需要它,为什么不写:

SELECT DISTINCT submissionID 
FROM answer 
WHERE answer = '16' OR answer = '20'

但是,我感觉您并没有向我们提供所有信息。例如,我在您的原始查询中看不到任何限制对特定问题的答案的内容。如果调查只有一个问题,那当然是可能的,但我觉得这不是你的意思。精心制作的...

于 2012-06-04T17:29:21.890 回答
0

我认为您需要一个或另一个 from 子句中的答案表的别名。像这样...

SELECT DISTINCT(submissionID) as submissionID FROM answer a 
WHERE EXISTS (
    SELECT *
    FROM answer
    WHERE submissionID = a.submissionID AND (answer = '16' OR answer = '20')

)
于 2012-06-04T17:30:59.077 回答
0

这是您的原始查询

SELECT DISTINCT(submissionID) as submissionID FROM answer 
WHERE EXISTS (
    SELECT *
    FROM answer
    WHERE submissionID = submissionID AND (answer = '16' OR answer = '20')

)

您应该为表添加别名以关联它们

SELECT DISTINCT(submissionID) as submissionID FROM answer B
WHERE EXISTS (
    SELECT *
    FROM answer A
    WHERE A,submissionID = B.submissionID AND (answer = '16' OR answer = '20')

)
于 2012-06-04T17:32:41.453 回答