我试图在两个表都有相同的机器编号,并且两个表中都有相同编号的条目时得到结果。
以下是我尝试过的:
SELECT fehler.*,
'maschine.Maschinen-Typ',
maschine.Auftragsnummer,
maschine.Kunde,
maschine.Liefertermin_Soll
FROM fehler
JOIN maschine
ON ltrim(rtrim('maschine.Maschinen-Nr')) = ltrim(rtrim(fehler.Maschinen_Nr))
我要加入的领域是 varchar
在这两种情况下。我试过不修剪,但仍然返回空
我正在使用mariadb(如果这很重要的话)。
3条答案
按热度按时间von4xj4u1#
为了避免将来出现这种问题,db的约定是snake case(小写\小写)。
除此之外,发布您的db模式将非常有用,因为我不猜您的数据结构。
(为了便于开发,变量、表和列应该用英语编写是很有用的)
因此,如果表“maschine”有一列名为“maschinen nr”,而表“fehler”有一列名为“maschinen\u nr”,并且字段相互匹配,那么会出现什么错误呢
小心maschinen nr和maschinen\u nr。他们是故意的吗?
这是一个非常盲目的解决方案,因为你不知道你的问题是什么,甚至你的模式是:
其中匹配的\u列分别是pk和fk,或者如果数据同时匹配这两列,则[]是可选的,如果未给定,则将考虑表\u名称
pgx2nnw82#
在ltrim上(rtrim('maschine.maschinen nr'))=ltrim(rtrim(fehler.maschinen nr))似乎是错误的。。。
fehler.maschinen\u nr真的是字符串“maschine.maschinen nr”吗?
最后一行比较了字符串和数字。应该是这样的。另外,使用反勾号引用列名。
8dtrkrch3#
单引号是字符串分隔符。你在比较
fehler.Maschinen_Nr
用绳子'maschine.Maschinen-Nr'
. 在标准sql中,您可以对名称使用双引号(我认为mariadb也允许这样做,提供了某些设置)。在mariadb中,常用的名称限定符是backtick:(当然,最好不要使用带有减号或其他字符的名称,这些字符会迫使您首先使用名称分隔符。)
如你所见,你可以使用
TRIM
而不是LTRIM
以及RTRIM
. 不过,在插入数据时,最好不要在开头或结尾留有空格。这样就不必在每个查询中都删除它们。而且,看起来
Maschinen_Nr
应该是表的主键maschine
然后在表中使用一个外键fehler
. 那会确保fehler
不包含任何Maschinen_Nr
在我们的世界里并不存在maschine
.