2016-09-26 26 views
-1
REPORTER  PARTNER NET_WEIGHT YEAR  COMMODITY 

'Egypt',  'Canada',  '5', '2010', 'wheat' 
'Germany',  'UK',  '1', '2011', 'wheat' 
'Mexico', 'France',  '5', '2011', 'wheat' 

这是我的表我想创建从中我们希望得到未在表中存在其NET_WEIGHT不存在INT能数据的一个过程如何检查是否整型数组,记录不能在MySQL中存在

像这样我想当我通过输入为“1,12,16”

然后它应该返回12 | null和16 | null我必须检查其NET_WEIGHT是不是在表中找到,因此我们应该得到NET_WEIGHT | null数据请告诉我如何做到这一点

+0

实际上我想返回其ID在表我传递输入作为整数数组1被发现,但12和16不存在未发现它应该给输出像12 | null并在第二行16 | null @Carlos Fdev –

+0

select * from table name where NET_WEIGHT NOT IN(1,12,16); – JYoThI

+0

不是这样我需要哪个记录不存在表像我想要12和16不存在然后我应该得到12 | null 16 | null你有我想要的? @JYoThI –

回答

1
drop procedure if exists `tokensise`; 
delimiter // 
CREATE DEFINER=`root`@`localhost` procedure `tokensise`(`instring` varchar(255)) 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
begin 
declare tempstring varchar(100); 
declare outstring varchar(100); 
declare checkit int; 
set tempstring = ltrim(rtrim(instring)); 
set checkit = 0; 
drop table if exists occursresults; 
create table occursresults(letter char(1), occurs int); 
looper: while tempstring is not null and instr(tempstring,',') > 0 do 
     set outstring = substr(tempstring,1,instr(tempstring, ',')); 
     set tempstring = ltrim(rtrim(replace(tempstring,outstring,''))); 
     set outstring = replace(outstring,',',''); 
     set checkit = checkit + 1; 
     insert into occursresults 
     select outstring, t.NET_WEIGHT 
        from (select outstring os) d left join t on t.NET_WEIGHT = d.os; 
end while; 
    set outstring = tempstring; 
    set tempstring = ltrim(rtrim(replace(tempstring,outstring,''))); 
    set outstring = replace(outstring,',',''); 
    set checkit = checkit + 1; 
    insert into occursresults 
     select outstring, t.NET_WEIGHT 
        from (select outstring os) d left join t on t.NET_WEIGHT = d.os; 

end // 
delimiter ; 

结果

MariaDB [sandbox]> call tokensise('1,2,5'); 
Query OK, 2 rows affected (0.38 sec) 

MariaDB [sandbox]> select * from occursresults; 
+--------+--------+ 
| letter | occurs | 
+--------+--------+ 
| 1  |  1 | 
| 2  | NULL | 
| 5  |  5 | 
| 5  |  5 | 
+--------+--------+ 
4 rows in set (0.00 sec) 
+0

其显示错误错误代码:1146.表'Parabola.t'不存在 –

+0

在任何您的表被调用的select语句中替换t。 –

0

我会用2个表a nd比较一个到另一个 - 我也用NOT IN而不是NOT EXIST - 这个SQL我用在一个足球数据库上,用来检查球队是否存在于结果表中,但不是统计表。下面的代码将显示结果中的所有行,其中hometeam不存在为team.stats。

SELECT * 
FROM results 
WHERE hometeam NOT IN (SELECT team FROM stats) 
+0

我需要从一个表中,而不是从另一个表 –