В Visual FoxPro оператор = означает равный.Оператор == означает «точно равный».Другими словами, оператор == сравнивает размер и значение каждого выражения.Например:
* Returns .T. because the first 3 characters on the left match the right.
? "123" = "12345"
* Returns .F. because the expression sizes are not equal.
? "123" == "12345"
Тем не менее, единственная причина, по которой я могу думать, что JOIN потерпит неудачу - это то, что столбцы, к которым вы присоединяетесь, не имеют одинаковый размер.Например, этот запрос возвращает запись 555-1234 только потому, что столбец CHAR автоматически дополняется пробелами.
CREATE CURSOR "MyLeft" (LeftPK I, LeftCode C(20))
INSERT INTO "MyLeft" VALUES(1, "351-561")
INSERT INTO "MyLeft" VALUES(2, "555-1234")
CREATE CURSOR "MyRight" (RightPK I, RightCode C(20))
INSERT INTO "MyRight" VALUES(1, "351-561-35C")
INSERT INTO "MyRight" VALUES(2, "555-1234")
SELECT MyLeft.*, MyRight.* FROM "MyLeft" JOIN "MyRight" ON LeftCode = RightCode
В то время как этот запрос возвращает обе записи, поскольку столбецтип VARCHAR.
CREATE CURSOR "MyLeft" (LeftPK I, LeftCode V(20))
INSERT INTO "MyLeft" VALUES(1, "351-561")
INSERT INTO "MyLeft" VALUES(2, "555-1234")
CREATE CURSOR "MyRight" (RightPK I, RightCode V(20))
INSERT INTO "MyRight" VALUES(1, "351-561-35C")
INSERT INTO "MyRight" VALUES(2, "555-1234")
SELECT MyLeft.*, MyRight.* FROM "MyLeft" JOIN "MyRight" ON LeftCode = RightCode