2014-10-04 85 views
0

我尝试在mysql连接中建立一个条件'on子句'。mysql - 在mysql连接条件'on子句'

如果field1不为空,则应在'on claus' 中使用,但如果为空,则应使用field2。

SELECT * FROM table1 
JOIN table2 

IF (field1!='') THEN (
    ON table1.field1 = table2.field1 
    AND table1.field3 = table2.field3 
    ) 
ELSE (
    ON table1.field2 = table2.field2 
    AND table1.field3 = table2.field3 
    ) 
END IF 

任何想法,如果这是可能的如何可以完成?

编辑: 我忘了解释这两个表都包含空字段,我试图防止mysql使用这些字段进行连接,因为这给出了非常多的连接,所以我的想法应该更像这样:

SELECT * FROM table1 
JOIN table2 

IF (table1.field1!='' AND table2.field1!='') THEN (
    ON table1.field1 = table2.field1 
    AND table1.field3 = table2.field3 
    ) 
ELSE (
    ON table1.field2 = table2.field2 
    AND table1.field3 = table2.field3 
    ) 
END IF 

回答

3

试试这个:

SELECT * FROM table1 t1 
LEFT JOIN table2 t2 
LEFT JOIN table2 t3 
on t1.Field1=t2.Field1 and t1.Field3=t2.Field3 
on t1.Field2=t3.Field2 and t1.Field3=t3.Field3 

然后使用寿从表2或表3选择该领域的条件。

希望这可以帮助你。

编辑

要选择合适的现场使用这样的:

SELECT t1.*, IF(t2.field1 is null, t3.field1, t2.Field1) as Field1 
+0

条件应放置在where子句中,是对的吗? – user3304232 2014-10-04 14:22:20

+0

在选择。我编辑我的答案 – ericpap 2014-10-04 14:44:03

+0

目前我在'on子句'中获得“未知列't2.Field1'” – user3304232 2014-10-04 15:05:57

0

你应该考虑将你的INNER JOIN为已经在其他的答案中所示一样

SELECT * FROM table1 t1 
    LEFT JOIN table2 t2 
    ON t1.field1 = t2.field1 AND t1.field3 = t2.field3 
    LEFT JOIN table2 t22 
    ON t1.field2 = t22.field2 AND t1.field3 = t22.field3 

你一个LEFT JOIN还可以尝试下面的东西

SELECT t1.* 
FROM table1 t1 
    JOIN table2 t2 
    ON t1.field1 = t2.field1 AND t1.field3 = t2.field3 
     OR t1.field2 = t2.field2 AND t1.field3 = t2.field3 
0

我认为你可以做这样的事情:

SELECT * FROM table1 
JOIN table2 ON 
    (
     (table1.field1 = '' AND table1.field2 = table2.field2 AND table1.field3 = table2.field3) 
     OR 
     (table1.field1 != '' AND table1.field1 = table2.field1 AND table1.field3 = table2.field3) 
    ) 

(注:我不知道如何有效地或以其他方式这种方式)