带连接的Mysql查询
我无法进行查询以获得一些交叉值。我对mysql的了解不足以制作这种东西 我有两张桌子,signedup和signedup。两个字段都相同:姓名、姓氏1、姓氏2、NIF、年份、城市、状态和签名日期 当按姓氏1和姓氏2(A到Z)排序的状态均为0时,我希望将两个表中的所有值一起获取。此外,我还希望有一个新字段,名为“app”,其中根据数据来自哪个表,它会说是或否。如果签名为PupLocal,则为是,否则为否 之后,当状态为1时,我想做同样的事情,按dateSigned排序(先老一点) 到目前为止,我还没有尝试测试一个完整的查询,因为我对它的一部分有问题 我已经试过这样的方法:带连接的Mysql查询,mysql,sql,join,Mysql,Sql,Join,我无法进行查询以获得一些交叉值。我对mysql的了解不足以制作这种东西 我有两张桌子,signedup和signedup。两个字段都相同:姓名、姓氏1、姓氏2、NIF、年份、城市、状态和签名日期 当按姓氏1和姓氏2(A到Z)排序的状态均为0时,我希望将两个表中的所有值一起获取。此外,我还希望有一个新字段,名为“app”,其中根据数据来自哪个表,它会说是或否。如果签名为PupLocal,则为是,否则为否 之后,当状态为1时,我想做同样的事情,按dateSigned排序(先老一点) 到目前为止,我还
SELECT signedupLocal.name,
signedupLocal.surname1,
signedupLocal.surname2,
signedupLocal.NIF,
signedupLocal.year,
signedupLocal.city,
signedup.name,
signedup.surname1,
signedup.surname2,
signedup.NIF,
signedup.year,
signedup.city
FROM signedup, signedupLocal
WHERE signedup.id_Event = 78
AND signedupLocal.id_Event = 78
AND signedupLocal.status = 0
AND signedup.status = 0
但它失败了 使用两个查询的联合来连接结果
SELECT * FROM (
SELECT *, "signedup" AS tablename FROM signedup WHERE …
UNION
SELECT *, "signedupLocal" AS tablename FROM signedupLocal WHERE …
) U
ORDER BY U.dateSigned DESC
请注意,使用UNION
时,需要使用列编号,而不是顺序中的列名。我使用了UNION-ALL
,因为它比UNION
更有效,因为后者会删除重复项,这会给数据库引擎带来麻烦。所以如果你知道没有,你可以避免
对于排序,我在不应按排序列对记录进行排序的情况下使用常量。“但它失败了。”确切地说,这意味着什么?此外,没有连接条件。因此,他将从两个表中获取所有行的组合。我尝试了这一方法进行测试,但没有得到行。我可以引导您进入连接的伟大解释页面吗?这很有效。您知道如何在联接的每个部分添加具有不同值的新字段吗?答案是/否field@FabienWarniez您缺少问题中描述的排序。是否可以连接2个联接?我的意思是,我希望状态为0的用户按姓氏排序,但状态为1的用户按dateSigned排序。我想我必须进行两次查询才能获得状态0和状态1
SELECT name, surname1, surname2, NIF, year, city, status, 'no' as app,
case when status = 1 then datesigned else '2099-12-31' end as datesigned_sort,
case when status = 0 then surname1 else '' end as surname1_sort,
case when status = 0 then surname2 else '' end as surname2_sort
FROM signedup
WHERE id_Event = 78 AND status in(0,1)
UNION ALL
SELECT name, surname1, surname2, NIF, year, city, status, 'yes' as app,
case when status = 1 then datesigned else '2099-12-31' end as datesigned_sort,
case when status = 0 then surname1 else '' end as surname1_sort,
case when status = 0 then surname2 else '' end as surname2_sort
FROM signedupLocal
WHERE id_Event = 78 AND status in(0,1)
ORDER BY 7 asc, 9 desc, 10 asc, 11 asc