ÿ¸ö²Ù×÷·û¶¼ÊǶÔÕæÕý¸É»îµÄ¶ÔÓ¦º¯ÊýµÄ"ÓïÒåÐÞÊÎ"£»ËùÒÔÄãÔÚ´´½¨²Ù×÷·û֮ǰ±ØÐëÏÈ´´½¨¶ÔÓ¦µÄº¯Êý¡£²»¹ý£¬Ò»¸ö²Ù×÷·ûÒ²²¢²»½ö½öÊÇÓïÒåÐÞÊΣ¬ÒòΪËü»¹´ø×Å¿ÉÒÔ°ïÖú²éѯ¹æ»®Æ÷ÓÅ»¯Ê¹ÓøòÙ×÷·ûµÄ²éѯµÄ¸½¼ÓÐÅÏ¢¡£±¾ÕµĴ󲿷ֽ«ÓÃÓÚ½âÊÍÄÇЩ¸½¼ÓÐÅÏ¢¡£
ÏÂÃæÊÇÒ»¸ö´´½¨ÓÃÓÚÁ½¸ö¸´ÊýÏà¼ÓµÄ²Ù×÷·ûµÄÀý×Ó¡£ÎÒÃǼÙÉèÒѾ´´½¨Á˸´ÊýÀàÐ͵Ķ¨Òå¡£Ê×ÏÈÎÒÃÇÐèÒª×ö£¨Ïà¼Ó£©¹¤×÷µÄº¯Êý£»È»ºóÎÒÃǾͿÉÒÔ¶¨Òå²Ù×÷·û£º
CREATE FUNCTION complex_add(complex, complex) RETURNS complex AS '$PWD/obj/complex.so' LANGUAGE 'c'; CREATE OPERATOR + ( leftarg = complex, rightarg = complex, procedure = complex_add, commutator = + );ÏÖÔÚÎÒÃÇ¿ÉÒÔ£º
SELECT (a + b) AS c FROM test_complex; +----------------+ |c | +----------------+ |(5.2,6.05) | +----------------+ |(133.42,144.95) | +----------------+ÎÒÃÇÔÚÕâÀïÒѾÑÝʾÁËÈçºÎ´´½¨Á½Ä¿²Ù×÷·û¡£Òª´´½¨µ¥Ä¿²Ù×÷·û£¬Ö»ÐèҪʡÂÔ×ó²Ù×÷Êý£¨¶Ô×óÄ¿²Ù×÷·û£©»òÕßÓÒ²Ù×÷Êý£¨¶ÔÓÒ²Ù×÷·û£©¼´¿É¡£Ö»Óйý³Ì£¨procedure£©×Ó¾äºÍ²ÎÊý£¨argument£©×Ó¾äÊÇ CREATE OPERATOR ÀïÐèÒªµÄÌõÄ¿¡£Àý×ÓÀïÑÝʾµÄ COMMUTATOR ×Ó¾äÊÇÒ»¸ö¸ø²éѯÓÅ»¯Æ÷µÄ¿ÉÑ¡µÄ°µÊ¾¡£¹ØÓÚ COMMUTATOR ºÍÆäËüÓÅ»¯Æ÷°µÊ¾µÄÏêϸÐÅÏ¢ÔÚÏÂÃæ¸ø³ö¡£
×÷ÕߣºÓÉ Tom Lane Êéд¡£Postgres µÄ²Ù×÷·û¶¨Òå¿ÉÒÔ°üÀ¨¼¸¸ö¿ÉÑ¡µÄ×Ӿ䣬ÕâЩ×Ó¾ä¸æËßϵͳһЩ¹ØÓڸòÙ×÷·ûµÄÌØÐÔµÄÓÐÓÃÐÅÏ¢¡£ÔÚ¿ÉÄܵÄÇé¿öÏ£¬ÎÒÃǶ¼Ó¦¸ÃÌṩÕâЩ×Ӿ䣬ÒòΪËüÃÇ¿ÉÄÜΪʹÓÃÕâ¸ö²Ù×÷·ûµÄ²éѯ´øÀ´¿É¹ÛµÄËÙ¶ÈÌáÉý¡£²»¹ýҪעÒâÈç¹ûÄãÉùÃ÷ÁËÕâЩ×Ӿ䣬Äã±ØÐëÈ·±£ËüÃÇÊÇÕýÈ·µÄ£¡¶ÔÓÅ»¯×Ó¾äµÄ´íÎóʹÓý«µ¼Öºó¶ËµÄ±ÀÀ££¬¾«Ï¸µÄÊä³ö´íÎó»òÕßÆäËûÔã¸âÊÂÇé¡£Èç¹ûÄã¶ÔÕâЩÊÂÇ鲻ȷ¶¨µÄ»°£¬Äã¿ÉÒÔ×ÜÊǺöÂÔÓÅ»¯×Ӿ䣻ΨһµÄºó¹ûÊDzéѯ¿ÉÄܱÈÐèÒªµÄÔËÐеÄÂýһЩ¡£
¸½¼ÓµÄÓÅ»¯×Ó¾ä¿ÉÄÜÔÚ½ñºóµÄ Postgres °æ±¾Àï³öÏÖ¡£ÕâÀïÃèÊöµÄ¶¼ÊÇ°æ±¾ 6.5 ¿ÉÒÔÀí½âµÄ¡£
Ò»¸ö±»»»ÏòµÄ²Ù×÷·ûµÄ×ó²Ù×÷·ûÓëËüµÄ»»ÏòÆ÷µÄÓÒ²Ù×÷·ûÏàͬ£¬·´Ö®ÒàÈ»¡£ËùÒÔPostgres ËùÐèÒªµÄÖ»ÊÇÒ»¸ö»»ÏòÆ÷²Ù×÷·ûµÄÃû³ÆÓÃÒÔ²éÕҸû»ÏòÆ÷£¬ÄÇÒ²ÊÇ COMMUTATOR ×Ó¾äÀïËùÐèÒªµÄΨһµÄ¶«Î÷¡£
µ±Ä㶨ÒåÒ»¸ö×Ô»»ÏòµÄ²Ù×÷·ûʱ£¬Ä㶨ÒåËü¾ÍÊÇÁË¡£µ±Ä㶨ÒåÒ»¶Ô»»ÏòÆ÷²Ù×÷·ûʱ£¬ÊÂÇé¾ÍÓÐÒ»µã¼¬ÊÖ£ºÔõÑù¶¨ÒåÒ»¸ö²Ù×÷·ûµÄ»»ÏòÆ÷Ö¸ÏòÁíÒ»¸öÄ㻹ûÓж¨ÒåµÄ²Ù×÷·ûÄØ£¿ÎÒÃǶÔÕâ¸öÎÊÌâÓÐÁ½¸ö½â¾ö·½·¨£º
ÁíÒ»¸ö¸üÖ±½ÓµÄ·½·¨ÊÇÔÚÁ½¸ö¶¨ÒåÀïÃ涼°üº¬ COMMUTATOR ×Ӿ䡣µ± Postgres ´¦ÀíµÚÒ»¸ö¶¨Òå²¢Òâʶµ½ COMMUTAOTR Ö¸ÏòÒ»¸ö²»´æÔڵIJÙ×÷·û£¬ÏµÍ³»áÔÚϵͳµÄ pg_operator ±íÀïÃæΪ¸Ã²Ù×÷·û¼Ç¼һ¸öÐéÄâµÄ¼Ç¼¡£Õâ¸öÐéÄâµÄ¼Ç¼ֻÓвÙ×÷·ûÃû£¬×óºÍÓÒ²ÎÊýÀàÐÍÒÔ¼°½á¹ûÀàÐÍÊÇÓÐЧµÄ£¬ÒòΪÕâЩÊǵ½Ä¿Ç°ÎªÖ¹Postgres ¿ÉÒÔÍƵ¼³öÀ´µÄ¶«Î÷¡£µÚÒ»¸ö²Ù×÷·û±í¼Ç¼½«ºÍÕâ¸öÐéÄâ¼Ç¼Áª½Ó¡£ÉԺ󣬵±Ä㶨ÒåµÚ¶þ¸ö²Ù×÷·ûʱ£¬ÏµÍ³½«ÓÃÀ´×ÔµÚ¶þ¸ö²Ù×÷·ûµÄÐÅÏ¢¸üиÃÐéÄâ¼Ç¼¡£Èç¹ûÄãÊÔͼÔÚÐéÄâ²Ù×÷·û±»Ìî³ä֮ǰʹÓÃËü£¬Ä㽫ֻÄÜÊÕµ½Ò»Ìõ´íÎóÐÅÏ¢¡££¨×¢Ò⣺Õâ¸ö¹ý³ÌÔÚPostgres 6.5ÒÔÇ°µÄ°æ±¾²»ÄÜ¿É¿¿µÄ¹¤×÷£¬µ«ÊÇÏÖÔÚÕâÖÖ·½·¨ÊÇÎÒÃÇÍƼöµÄ·½·¨¡££©
²»Ïó COMMUTATOR£¬Ò»¶Ôµ¥Ä¿²Ù×÷·û¿ÉÒÔ»¥ÎªÓÐЧµÄ·ñ¶¨·û£»ÄǾÍÒâζ×ŶÔÓÚËùÓÐµÄ x£¬(A x) µÈÓÚ NOT (B x)£¬»òÕßÀàËƵÄÓÒÄ¿²Ù×÷·ûµÄÕâÖÖÇé¿ö¡£
Ò»¸ö²Ù×÷·ûµÄ·ñ¶¨·û±ØÐëÓÐÓڸòÙ×÷·û±¾ÉíÒ»ÑùµÄ×óºÍ/»òÓÒ²ÎÊý£¬ËùÒÔ¾ÍÏó COMMUTATOR Ò»Ñù£¬Ö»ÓвÙ×÷·ûÃûÐèÒªÔÚ NEGATOR ×Ó¾äÀïÃæ¸ø³ö¡£
Ìṩ NEGATOR ¶Ô²éѯÓÅ»¯Æ÷ÊǷdz£ÓаïÖúµÄ£¬ÒòΪÕâÑù¾ÍÔÊÐíÏó NOT (x = y) ÕâÑùµÄ±í´ïʽ¼ò»¯³É x <> y¡£ÕâÑùµÄÇé¿ö±ÈÄãÏëÏóµÄҪƵ·±µÄ¶à£¬ÒòΪ NOT ¿ÉÄÜÒòΪÆäËûµÄÖØÅÅÁжø±»ÒýÈë¡£
·ñ¶¨·û¶Ô¿ÉÒÔÓÃÉÏÃæ»»Ïò·û¶ÔÖнâÊ͵ÄÏàͬµÄ·½·¨À´¶¨Òå¡£
field OP constantËü¿ÉÒÔ¸ø³öÕâÖÖÀàÐ굀 WHERE ×Ó¾ä¿ÉÒÔɾ³ý¶àÉÙÐеÄÒ»¸ö¸ÅÄÕ⽫°ïÖúÓÅ»¯Æ÷½øÐÐÓÅ»¯¡££¨Äã¿ÉÄÜ»á˵£¬Èç¹û¸Ã³£Á¿£¨constant£©ÔÚ×ó±ßÔõô°ì£¿Å¶£¬ÄÇÊÇ COMMUTATOR ¸ÉµÄÊÂ...£©
ÊéдеÄÑ¡ÔñÐÔÏÞÖƼÆË㺯ÊýÔ¶Ô¶³¬³öÁ˱¾Õµķ¶Î§£¬²»¹ýºÜÐÒÔ˵ÄÊÇ£¬Í¨³£Äã¶Ô×Ô¼ºµÄ²Ù×÷·ûÖ»ÐèҪʹÓÃϵͳ±ê×¼µÄ¼ÆËãÆ÷Ö®Ò»¾ÍÐÐÁË¡£ÏÂÃæÊÇһЩ±ê×¼ÏÞÖƼÆËãÆ÷£º
eqsel for = neqsel for <> scalarltsel for < or <= scalargtsel for > or >=ÕâЩ¶¼ÊÇ·ÖÀ࣬¿´ÆðÀ´ÓеãÆæ¹Ö£¬²»¹ýÈç¹ûÄã×ÐϸÏëÏ룬¾Í»á¾õµÃÓеÀÀí¡£'=' ´ó¶à½«Ö»½ÓÊܱíÖеÄһС²¿·ÖÐУ»'<>' ´ó¶à½«¾Ü¾øһС²¿·ÖÐС£'<' ½«½ÓÊܵÄÐÐÈ¡¾öÓÚ¸ø³öµÄ³£Á¿ÂäÔÚ±íµÄ¸ÃÁÐÊý¾ÝÖµµÄÄÄÒ»¸ö·¶Î§À¸ÃÖµÅöÇÉÊÇ VACUUM ANALYZE ÊÕ¼¯²¢ÇÒÌṩ¸øÑ¡ÔñÐÔ¼ÆËãÆ÷µÄÐÅÏ¢£©¡£'<=' ÔÚͬÑùµÄ³£Á¿Ê±»á½ÓÊÜ±È '<' ÂÔ΢´óһЩµÄÐУ¬²»¹ýËüÃÇÒ²·Ç³£½Ó½ü£¬¼¸ºõ²»ÖµµÃÇø±ð¿ªÀ´£¬ÓÈÆäÊÇÎÞÂÛÈçºÎÎÒÃÇÒ²±È×öä²ÂºÃµÃ¶à¡£ÀàËƵÄÇé¿öÒ²ÊÊÓÃÓÚ '>' ºÍ '>='¡£
Äã¿ÉÄܳ£Ï°¹ßÓÚ°Ñ eqsel »òÕß neqsel ÓÃÓÚÄÇЩ·Ç³£¸ß»òÕ߷dz£µÍÑ¡ÔñÐԵIJÙ×÷·û£¬¼´Ê¹ËüÃDz¢·ÇÕæÕýÏàµÈ»òÕß²»ÏàµÈ¡£ÀýÈ磬¹æÔò±í´ïʽƥÅä²Ù×÷·û£¨~£¬~*£¬µÈ£©³£Ê¹Óà eqsel£¬ÊÇ»ùÓÚÕâÑùµÄ¼ÙÉ裺ËüÃÇÖ»»áÆ¥ÅäÕû¸ö±íÖеÄһС²¿·Ö¼Ç¼¡£
Äã¿ÉÒÔ°Ñ scalarltsel ºÍ scalargtsel ÓÃÓڱȽÏÄÇЩΪ½øÐз¶Î§±È½Ï±»×ª»¯ÎªÊý×ֳ߶ȺóÓÐÃ÷ÏÔÒâÒåµÄÊý¾ÝÀàÐÍ¡£Èç¹û¿ÉÄÜ£¬°Ñ¸ÃÊý¾ÝÀàÐÍÔö¼Óµ½¿ÉÒÔ±»Îļþ src/backend/utils/adt/selfuncs.c ÀïµÄ¹ý³Ì convert_to_scalar() Àí½âµÄ²¿·Ö¡££¨×îÖÕ£¬Õâ¸ö¹ý³Ì½«±»·Åµ½ÓÉ pg_type ±íÀïµÄÒ»¸öÁбêʶµÄÿÖÖÀàÐÍÒ»¸öµÄº¯Êý´úÌ棬²»¹ýÄ¿Ç°»¹Ã»ÓÐÕâô×ö¡££©Èç¹ûÄãûÓÐ×öÕâЩ£¬ÏµÍ³ÈÔÈ»Äܹ¤×÷£¬²»¹ýÓÅ»¯Æ÷µÄ¹À¼Æ²»»áÏóÏëÏóµÄÄÇôºÃ¡£
ÔÚ src/backend/utils/adt/geo_selfuncs.c ÀﻹÓÐΪ¼¸ºÎ²Ù×÷·ûÉè¼ÆµÄ¶îÍâµÄÑ¡ÔñÐÔº¯Êý£ºareasel£¬positionsel£¬ºÍ contsel¡£ÔÚÎÒдÕâЩµÄʱºò£¬ËüÃǶ¼Ö»ÊÇ´æ¸ù£¬µ«ÊÇÄ㻹ÊÇ¿ÉÒÔʹÓ㨻òÕ߸üºÃµÄÊÇ£¬¸ÄÁ¼ËüÃÇ£©ËüÃÇ¡£
table1.field1 OP table2.field2ºÍ RESTRICT ×Ó¾äÒ»Ñù£¬ÕâЩºÜÓпÉÄÜ°ïÖúÓÅ»¯Æ÷ÓÃ×îÉٵĴ¦Àí¹´»³öÒª²ÉÈ¡¿ÉÄܵÄÁªºÏ˳ÐòÖеÄÄÄÒ»¸ö¡£
ºÍÇ°ÃæÒ»Ñù£¬±¾½Ú²»»áÊÔͼ½âÊÍÈçºÎÊéдһ¸öÁªºÏÑ¡ÔñÐÔ¼ÆËãÆ÷º¯Êý£¬µ«ÊǻὨÒéÄãÔÚÓÐÒ»¸ö¿ÉÓõÄÇé¿öÏ£¬Ê¹ÓÃÒ»¸ö±ê×¼µÄ¼ÆËãÆ÷£º
eqjoinsel for = neqjoinsel for <> scalarltjoinsel for < or <= scalargtjoinsel for > or >= areajoinsel for 2D area-based comparisons positionjoinsel for 2D position-based comparisons contjoinsel for 2D containment-based comparisons
¹þÏ££¨É¢ÁУ©ÁªºÏµÄ¼ÙÉèÊÇ£º¶ÔÓÚÒ»¶Ô¹þÏ££¨É¢ÁУ©µ½Í¬ÑùµÄ¹þÏ££¨É¢ÁУ©´úÂëµÄ×óºÍÓÒ²Ù×÷ÊýÖµ£¬¸ÃÁªºÏ²Ù×÷·ûÖ»ÄÜ·µ»Ø TRUE¡£Èç¹ûÁ½¸öÖµ±»·Åµ½²»Í¬µÄ¹þϣͰÀÁªºÏ½«¸ù±¾²»±È½ÏËüÃÇ£¬Òþº¬µØÒâζ×ÅÁªºÏ²Ù×÷·ûµÄ½á¹ûÒ»¶¨ÊÇ FALSE¡£ËùÒÔ¶ÔÓÚ²»´ú±íÏàµÈµÄ²Ù×÷·û£¬ÉùÃ÷ HASHES ÊÇûÓÐÒâÒåµÄ¡£
ʵ¼ÊÉÏ£¬Âß¼ÏàµÈ»¹²»¹»ºÃ£»¸Ã²Ù×÷·û×îºÃÊÇ´ú±íÍêÈ«µÄ°´Î»ÏàµÈ£¬ÒòΪ¹þÏ£º¯Êý½«¶Ô¸ÃÖµµÄÄÚ´æ±íÏÖÐÎʽ½øÐмÆËã¶ø²»¹ÜÕâЩλµÄº¬ÒåÊÇʲô¡£ÀýÈ磬ʱ¼ä¼ä¸ôµÄÏàµÈ²»ÊÇ°´Î»ÏàµÈ£»Ê±¼ä¼ä¸ôÏàµÈ²Ù×÷·ûÈÏΪÈç¹ûÁ½¸öʱ¼ä¼ä¸ô¾ßÓÐÏàͬ³ÖÐøʱ¼äʱ¾ÍÊÇÏàµÈµÄ£¬¶ø²»¹ÜËüÃǵÄÁ½¸ö¶ËµãÊÇ·ñÏàµÈ¡£Õâ¾ÍÒâζ×ŶÔÓÚÒ»¸öÓà "=" ÔÚʱ¼ä¼ä¸ôÓòÖ®¼äµÄÁªºÏ£¬Èç¹ûÓùþÏ£ÁªºÏʵÏÖ½«»áºÍÓñðµÄÁªºÏʵÏÖÉú³É²»Í¬µÄ½á¹û£¬ÒòΪ¿ÉÒÔÆ¥ÅäµÄ´ó²¿·ÖÊý¾Ý¶Ô½«±»¹þÏ£³É²»Í¬µÄÖµÒò¶ø²»»á±»¹þÏ£ÁªºÏ½øÐбȽϡ£µ«ÊÇÈç¹ûÓÅ»¯Æ÷Ñ¡ÔñʹÓò»Í¬µÄÁªºÏ·½·¨£¬ËùÓеȺŲÙ×÷·û˵ÏàµÈµÄÊý¾Ý¶Ô¶¼»á±»ÕÒ³öÀ´¡£ÎÒÃDz»Ïë³öÏÖÄÇÖÖ²»Ò»ÖÂÐÔ£¬ËùÒÔÎÒÃÇûÓбê¼Çʱ¼ä¼ä¸ôµÈºÅΪ¿É¹þÏ£µÄ¡£
ͬʱ»¹ÓÐһЩӲ¼þÏà¹ØµÄÒòËػᵼÖÂÒ»¸ö¹þÏ£ÁªºÏµÄ¼ÆËã´íÎó¡£ÀýÈ磬Èç¹ûÄãµÄÊý¾ÝÀàÐÍÊÇÒ»¸ö½á¹¹£¬½á¹¹Àï¿ÉÄÜÓв»ÒýÈË×¢ÒâµÄÌî³ä룬Õâʱ°ÑÕâ¸öµÈºÅ²Ù×÷·û±ê¼ÇΪ HASHES Ò²ÊDz»°²È«µÄ¡££¨³ý·ÇÄãÊéдÄãµÄÆäËû²Ù×÷·ûÒÔÈ·±£ÕâЩδÓõÄλ×ÜÊÇÁã¡££©ÁíÒ»¸öÀý×ÓÊÇ FLOAT Êý¾ÝÀàÐͶԹþÏ£ÁªºÏÒ²ÊDz»°²È«µÄ¡£ÔÚ·ûºÏ IEEE ¸¡µã±ê×¼µÄ»úÆ÷ÉÏ£¬¸ºÁãºÍÕýÁãÊDz»Í¬µÄÖµ£¨²»Í¬µÄλģʽ£©£¬µ«ÊÇËüÃDZ»¶¨ÒåΪ±È½ÏÏàµÈ¡£ËùÒÔ£¬Èç¹û¸¡µãµÈºÅ±»±ê¼ÇΪ HASHES£¬Ò»¸ö¸ºÁãºÍÒ»¸öÕýÁã¿ÉÄܲ»±»¹þÏ£ÁªºÏÆ¥Å䣬µ«ÊÇÓÃÆäËûÁªºÏ´¦Àí£¬ËüÃÇÓ¦¸ÃÊÇÆ¥ÅäµÄ¡£
µ×ÏßÊÇ£ºÄã¿ÉÄÜÖ»ÄÜ°Ñ HASHES ÓÃÓÚÓ㨻ò¿ÉÄÜÓã© memcmp£¨£©ÊµÏֵĵȺŲÙ×÷·û¡£
ÈÚºÏÁªºÏÊÇÒÔÕâÑùµÄ¸ÅÄîΪ»ù´¡µÄ£º¶Ô×ó±ßºÍÓұߵıí½øÐÐÅÅÐò£¬È»ºó²¢ÐеØɨÃèËüÃÇ¡£ËùÒÔ£¬Á½ÖÖÊý¾ÝÀàÐͶ¼±ØÐëÊÇÄܹ»ÍêÈ«ÅÅÐòµÄ£¬²¢ÇÒÁªºÏ²Ù×÷·û±ØÐëÖ»¶ÔÄÇЩÂäÔÚÅÅÐò˳ÐòÖеÄ"ij¸öλÖÃ"µÄÊýÖµ¶Ô³É¹¦¡£Êµ¼ÊÉÏÕâÒâζ×ÅÁªºÏ²Ù×÷·û±ØÐë±íÏÖµÃÏóµÈÓÚ¡£µ«ÊǺ͹þÏ£ÁªºÏ²»Í¬£¬£¨¹þÏ£ÁªºÏÀï×ó±ßºÍÓұߵÄÊý¾ÝÀàÐÍ×îºÃÊÇÏàͬµÄ£¨ÖÁÉÙÊÇ°´Î»ÏàµÈ£©£©£¬¿ÉÒÔ¶ÔÁ½ÖÖ²»Í¬Êý¾ÝÀàÐͽøÐÐÈÚºÏÁªºÏ -- Ö»ÒªËûÃÇÂß¼ÏàµÈ¼´¿É¡£ÀýÈ磬 int2 ¶Ô int4 µÄÏàµÈ²Ù×÷·ûÊÇ¿ÉÒÔÓÃÈÚºÏÁªºÏµÄ¡£ÎÒÃÇÖ»ÐèÒª¿ÉÒÔ°ÑÁ½ÖÖÊý¾ÝÀàÐÍÅÅÁгÉÂß¼¿É±ÈµÄÐòÁеÄÅÅÐò²Ù×÷·û¼´¿É¡£
µ±ÉùÃ÷ÈÚºÏÅÅÐò²Ù×÷·ûʱ£¬Ä¿Ç°µÄ²Ù×÷·ûºÍÁ½¸öÒýÓõIJÙ×÷·û±ØÐë·µ»Ø²¼¶û±äÁ¿£»SORT1 ²Ù×÷·ûµÄÁ½¸öÊäÈëÊý¾ÝÀàÐͱØÐëºÍÄ¿Ç°²Ù×÷·ûµÄ×ó²ÎÊýµÄÀàÐÍÏàͬ£¬¶ø SORT2 ²Ù×÷·ûµÄÁ½¸öÊäÈëÊý¾ÝÀàÐͱØÐëºÍÄ¿Ç°²Ù×÷·ûµÄÓÒ²ÎÊýµÄÀàÐÍÏàͬ¡££¨ºÍ COMMUTATOR ÒѾ NEGATOR Ò»Ñù£¬ÕâÒâζ×ŶÔÓÚÉùÃ÷¸Ã²Ù×÷·û¶øÑÔ£¬²Ù×÷·ûÃû³Æ¾Í×ã¹»ÁË£¬²¢ÇÒÈç¹ûÄãÅöÇÉÔÚÁíÒ»¸öµÈÓÚ²Ù×÷·û֮ǰ¶¨ÒåÒ»¸öµÈÓÚ²Ù×÷·û£¬ÏµÍ³Äܹ»×Ô¶¯Ìî³äÐéÄâ²Ù×÷·û¼Ç¼¡££©
ʵ¼ÊÉÏÄãÖ»ÄÜΪһ¸ö '=' ²Ù×÷·ûÊéд SORT ×Ӿ䣬²¢ÇÒÁ½¸ö²Î¿¼µÄ²Ù×÷·ûÓ¦¸Ã×ÜÊÇÃüÃûΪ '<'¡£ÊÔͼ¶ÔÃüÃûΪÆäËû¶«Î÷µÄ²Ù×÷·ûʹÓÃÈÚºÏÁªºÏ½«µ¼ÖÂÈÃÈ˾øÍûµÄ³åÍ»£¬ÎÒÃÇÒ»»á¶ù¾Í»á¿´µ½ÔÒò¡£
»¹ÓÐһЩ¶ÔÄã±ê¼ÇΪ¿ÉÈÚºÏÁ¬½ÓµÄ²Ù×÷·ûµÄ¸½¼ÓÏÞÖÆ¡£ÕâЩÏÞÖÆĿǰûÓб» CREATE OPERATOR ¼ì²é£¬µ«ÊÇÈç¹ûÏÂÃæÖ®Ò»ÊÇÕæµÄ»°£¬ÈÚºÏÁªºÏ»áÔÚÔËÐÐʱʧ°Ü£º
±ØÐëÓкͿÉÈÚºÏÁªºÏ²Ù×÷·û±¾ÉíÓÐÏàͬ×óÓÒÊäÈëÊý¾ÝÀàÐ굀 '<' ºÍ '>' ÅÅÐò²Ù×÷·û¡£ÕâЩ²Ù×÷·û±ØÐëÃüÃûΪ '<' ºÍ '>'£»ÔÚÕâ·½ÃæÄãûÓÐÈκÎÑ¡Ôñ£¬ÒòΪûÓÐÏÔʽÉùÃ÷ËüÃǵĹ涨¡£Òª×¢ÒâÈç¹û×óºÍÓÒÊý¾ÝÀàÐͲ»Í¬£¬ÕâЩ²Ù×÷·ûûÓÐÒ»¸öºÍ SORT ²Ù×÷·ûÖеÄÈκÎÒ»¸öÏàͬ¡£µ«ÊÇËüÃÇ×îºÃÄܶÔÓë SORT ²Ù×÷·û¼æÈݵÄÊý¾ÝÖµ½øÐÐÅÅÐò£¬·ñÔòÈÚºÏÁªºÏ½«ÔÚ¹¤×÷ÖÐʧЧ¡£