Index: meta.php
===================================================================
--- meta.php	(revision 28050)
+++ meta.php	(working copy)
@@ -944,7 +944,7 @@
 
 		$key_only_queries = array();
 		$queries = array();
-
+		
 		// Split out the queries with empty arrays as value
 		foreach ( $this->queries as $k => $q ) {
 			if ( isset( $q['value'] ) && is_array( $q['value'] ) && empty( $q['value'] ) ) {
@@ -998,11 +998,11 @@
 				$meta_compare = '=';
 
 			$i = count( $join );
-			$alias = $i ? 'mt' . $i : $meta_table;
+			$alias = $i ? 'mt' . $i : 'mt0';
 
 			if ( 'NOT EXISTS' == $meta_compare ) {
 				$join[$i]  = "LEFT JOIN $meta_table";
-				$join[$i] .= $i ? " AS $alias" : '';
+				$join[$i] .= " AS $alias";
 				$join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column AND $alias.meta_key = '$meta_key')";
 
 				$where[$k] = ' ' . $alias . '.' . $meta_id_column . ' IS NULL';
@@ -1010,10 +1010,12 @@
 				continue;
 			}
 
-			$join[$i]  = "INNER JOIN $meta_table";
-			$join[$i] .= $i ? " AS $alias" : '';
-			$join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column)";
-
+			if ( !$i ) {
+				$join[$i]  = "INNER JOIN $meta_table";
+				$join[$i] .= $i ? " AS $alias" : ' AS mt0';
+				$join[$i] .= " ON ($primary_table.$primary_id_column = $alias.$meta_id_column)";
+			}
+			
 			$where[$k] = '';
 			if ( !empty( $meta_key ) )
 				$where[$k] = $wpdb->prepare( "$alias.meta_key = %s", $meta_key );
@@ -1051,7 +1053,13 @@
 			if ( ! empty( $where[$k] ) )
 				$where[$k] .= ' AND ';
 
-			$where[$k] = ' (' . $where[$k] . $wpdb->prepare( "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string})", $meta_value );
+//			$where[$k] = ' (' . $where[$k] . $wpdb->prepare( "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string})", $meta_value );
+			
+			$where[$k] = ' ' . $primary_table . '.' . $primary_id_column . ' IN (' 
+					. ' SELECT ' . $meta_id_column 
+					. ' FROM ' . $meta_table . ' AS ' . $alias 
+					. ' WHERE ' . $where[$k] . $wpdb->prepare( "CAST($alias.meta_value AS {$meta_type}) {$meta_compare} {$meta_compare_string}", $meta_value )
+					. ')'; 
 		}
 
 		$where = array_filter( $where );
Index: query.php
===================================================================
--- query.php	(revision 28050)
+++ query.php	(working copy)
@@ -2654,13 +2654,13 @@
 					case 'meta_value':
 						if ( isset( $q['meta_type'] ) ) {
 							$meta_type = $this->meta_query->get_cast_for_type( $q['meta_type'] );
-							$orderby = "CAST($wpdb->postmeta.meta_value AS {$meta_type})";
+							$orderby = "CAST(mt0.meta_value AS {$meta_type})";
 						} else {
-							$orderby = "$wpdb->postmeta.meta_value";
+							$orderby = "mt0.meta_value";
 						}
 						break;
 					case 'meta_value_num':
-						$orderby = "$wpdb->postmeta.meta_value+0";
+						$orderby = "mt0.meta_value+0";
 						break;
 					case 'comment_count':
 						$orderby = "$wpdb->posts.comment_count";
