所以我很难尝试为此编写单个查询。我有一个表格,我们称之为table_a。我需要提取符合特定条件的单个记录。如果第一个没有产生任何东西然后再回到另一个。我已经在这一段时间了,很可能是一件简单的事情,我只是缺席了。
SELECT COALESCE(ta.id,tb.id,0) AS theid,
FROM table_a
RIGHT JOIN (
SELECT table_a.id
FROM table_a
WHERE table_a.field_3='1' AND table_a.field_4='100' AND table_a.user_id='someidhere'
) AS ta
ON table_a.id = ta.id
RIGHT JOIN (
SELECT table_a.id
FROM table_a
WHERE table_a.field_5='2' AND table_a.field_4='100' AND table_a.user_id='someidhere'
) AS tb
ON table_a.id = tb.id
RIGHT JOIN的问题是如果第一个没有产生记录它不会继续下一个,如果我做LEFT JOIN它会从table_a中提取所有记录,如果我指定WHERE table_a.user_id = 'someidhere'显然会为该用户提取所有记录。我只想找一个。基本上只有field_3和field_5才会改变。如果我找不到field_3的东西,它会移动到field_5。这将在具有80k记录的表上运行。想法?
答案 0 :(得分:0)
虽然一个新手,从一个神秘的例子开始并不是最好的,但我在这里尝试。您的查询本身对它正在做的事情毫无意义。它加入自身最终获取某个用户ID和字段4值的ID,但字段3或5应分别为1或2。
所以,我已经将查询直接写入" a"用户ID和字段4的表,无论你的右连接都是常见的...然后为你的字段3和5列添加了(OR)。这样,我只关心具有相同用户/字段4区域的3 OR 5值。 ORDER BY子句将强制首先对字段3值为1的任何记录进行排序,然后任何字段5 = 2的记录将是次要的......所以最后的第一个记录将是' 1'如果存在,则进入。
SELECT
table_a.id
FROM
table_a
where
table_a.user_id = 'someidhere'
AND table_a.field_4 = '100'
AND ( table_a.field_3 = '1'
OR table_a.field_5 = '2' )
order by
case when table_a.field_3 = '1'
then 1 else 2 end
因此,如果返回了多条记录,您只需关心返回的第一条记录(如果有两条记录符合条件)。