MySQL合并两个查询

13

我有两个MySQL查询

QUERY:

SELECT sodnik_1 FROM prihodnji_krog  WHERE file_id='8778' AND sodnik_1 != ''
UNION 
SELECT sodnik_2 FROM prihodnji_krog  WHERE file_id='8778' AND sodnik_2 != ''
UNION
SELECT sodnik_3 FROM prihodnji_krog  WHERE file_id='8778' AND sodnik_3 != ''
UNION
SELECT sodnik_4 FROM prihodnji_krog  WHERE file_id='8778' AND sodnik_4 != ''

QUERY:
SELECT value FROM notification_sodniki WHERE user_id='16'

OUTPUT LOOKS LIKE THIS:

Name 1
Name 2
Name 3
Name 4

IN BOTH TABLES

他们给我1列。我想执行交叉连接,并仅返回两个选择查询中均存在的值。这可能吗?

1个回答

31

你觉得怎样?

SELECT * FROM
(
    SELECT sodnik_1 as value FROM prihodnji_krog  WHERE file_id='8778' AND sodnik_1 != ''
    UNION 
    SELECT sodnik_2 as value FROM prihodnji_krog  WHERE file_id='8778' AND sodnik_2 != ''
    UNION
    SELECT sodnik_3 as value FROM prihodnji_krog  WHERE file_id='8778' AND sodnik_3 != ''
    UNION
    SELECT sodnik_4 as value FROM prihodnji_krog  WHERE file_id='8778' AND sodnik_4 != ''
) x INNER JOIN 
(
    SELECT value FROM notification_sodniki WHERE user_id='16'
) y 
ON x.value = y.value

FROM子句中使用子查询时,就像制作临时表一样。 然后通过别名您可以引用它们并执行INNER JOIN


它给了我不合法的字符集混合。但我认为你很接近了。 - litenull
是的,编码不同。等一下。 - litenull
我认为你可以像这篇文章中所述使用COLLATE https://dev59.com/PnA75IYBdhLWcg3w7tx6 或者更改编码使其对两者都相同。 - Marc
很高兴能帮忙。你理解这个查询吗?如果你不理解,我会更新我的答案,因为在使用它之前理解一切非常重要。 - Marc
我更新了我的回答。如果有帮助,请别忘了勾选旁边的白色复选框以接受答案 :) - Marc
我理解你的意思,但是如果你愿意的话,可以进行更新。因为我已经进行了无数次搜索,找到了无数条查询结果,但没有任何评论。寻找答案的人不仅需要代码,还需要解释。 - litenull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接